Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. class LinhaNaoFormatada(Exception):
  2.     def __init__(self, mensagem):
  3.         Exception.__init__(self, mensagem)
  4.  
  5. class ValorInvalido(Exception):
  6.     def __init__(self, mensagem):
  7.         Exception.__init__(self, mensagem)
  8.  
  9. # a utilizacao de excecoes serve como uma revisao, a questao nao pedia isso...
  10. def main():
  11.     usuarios = {}
  12.     espacoTotal = .0   
  13.  
  14.     # para o programa funcionar, esse arquivo deve estar na mesma pasta que esse script
  15.     try:
  16.         arquivo = open("usuarios.txt", "r")
  17.     except IOError:
  18.         print "O arquivo usuarios.txt deve estar na mesma pasta que esse arquivo"
  19.         return
  20.     # !atencao: a string linha vai conter um '\n' no final que deve ser removido
  21.     for linha in arquivo:
  22.         linhaSemQuebraDeLinha = linha[:-1] #ou linha.strip("\n")
  23.         #quebra a string no espaco, para obter o nome e o espaco utilizado pelo usuario
  24.         listaComNomeECapacidade = linhaSemQuebraDeLinha.split(" ")
  25.         if len(listaComNomeECapacidade) < 2:
  26.             raise LinhaNaoFormatada("A linha deve conter dois valores!")
  27.         nome = listaComNomeECapacidade[0]
  28.        
  29.         try:
  30.             espacoUtilizado = int(listaComNomeECapacidade[1])
  31.         except ValueError:
  32.             raise ValorInvalido("O segundo valor da linha deve ser um numero!")
  33.  
  34.         # a utilizacao de dicionario eh opcional, poderia ser feito com duas listas tambem
  35.         usuarios[nome] = espacoUtilizado
  36.         espacoTotal += espacoUtilizado
  37.  
  38.     arquivo.close()
  39.    
  40.  
  41.     #gerar a string de saida que sera gravada no arquivo
  42.     arquivo = open("relatorio.txt", "w")
  43.  
  44.     cabecalho = "ACME Inc. \t\t\tUso do espaco em disco pelos usuarios\n"
  45.     cabecalho += "----------------------------------------------------------------\n"
  46.     cabecalho += "Nr.\tUsuario\t\tEspaco utilizado\t% do uso\n\n"
  47.  
  48.     saida = cabecalho  
  49.  
  50.     i = 0
  51.     for usuario in usuarios:
  52.         espacoUtilizado = usuarios[usuario]
  53.         # nao se preocupe com essa linha, eh soh pra facilitar... isso nao cai na prova :P
  54.         saida += "%d\t%s%12.2f MB%15.2f%%\n" % (i+1, usuario, espacoUtilizado/1024**2.0, espacoUtilizado*100/espacoTotal)
  55.         i += 1
  56.  
  57.     espacoTotalEmMB = espacoTotal/1024**2.0
  58.     rodape = "\nEspaco total ocupado: %.2f MB\n" % (espacoTotalEmMB)
  59.     rodape += "Espaco medio ocupado: %.2f MB\n" % (espacoTotalEmMB/i)
  60.  
  61.     saida += rodape
  62.     saida += "\nPara colocar alinhado que nem estah no pdf, dah um trabalho..."
  63.     saida += " que nem vale a pena "
  64.     saida += "\n\nPergunta: Porque os nomes nao estao na mesma ordem da entrada ? E o que voce modificaria no programa para que eles ficassem?"
  65.  
  66.     arquivo.write(saida)
  67.     # nunca se esqueca de fechar o arquivo que foi aberto
  68.     arquivo.close()
  69.  
  70.  
  71. if __name__ == "__main__":
  72.     try:
  73.         main()
  74.     except ValorInvalido, e:
  75.         print e
  76.     except LinhaNaoFormatada, e:
  77.         print e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement