Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LinhaNaoFormatada(Exception):
- def __init__(self, mensagem):
- Exception.__init__(self, mensagem)
- class ValorInvalido(Exception):
- def __init__(self, mensagem):
- Exception.__init__(self, mensagem)
- # a utilizacao de excecoes serve como uma revisao, a questao nao pedia isso...
- def main():
- usuarios = {}
- espacoTotal = .0
- # para o programa funcionar, esse arquivo deve estar na mesma pasta que esse script
- try:
- arquivo = open("usuarios.txt", "r")
- except IOError:
- print "O arquivo usuarios.txt deve estar na mesma pasta que esse arquivo"
- return
- # !atencao: a string linha vai conter um '\n' no final que deve ser removido
- for linha in arquivo:
- linhaSemQuebraDeLinha = linha[:-1] #ou linha.strip("\n")
- #quebra a string no espaco, para obter o nome e o espaco utilizado pelo usuario
- listaComNomeECapacidade = linhaSemQuebraDeLinha.split(" ")
- if len(listaComNomeECapacidade) < 2:
- raise LinhaNaoFormatada("A linha deve conter dois valores!")
- nome = listaComNomeECapacidade[0]
- try:
- espacoUtilizado = int(listaComNomeECapacidade[1])
- except ValueError:
- raise ValorInvalido("O segundo valor da linha deve ser um numero!")
- # a utilizacao de dicionario eh opcional, poderia ser feito com duas listas tambem
- usuarios[nome] = espacoUtilizado
- espacoTotal += espacoUtilizado
- arquivo.close()
- #gerar a string de saida que sera gravada no arquivo
- arquivo = open("relatorio.txt", "w")
- cabecalho = "ACME Inc. \t\t\tUso do espaco em disco pelos usuarios\n"
- cabecalho += "----------------------------------------------------------------\n"
- cabecalho += "Nr.\tUsuario\t\tEspaco utilizado\t% do uso\n\n"
- saida = cabecalho
- i = 0
- for usuario in usuarios:
- espacoUtilizado = usuarios[usuario]
- # nao se preocupe com essa linha, eh soh pra facilitar... isso nao cai na prova :P
- saida += "%d\t%s%12.2f MB%15.2f%%\n" % (i+1, usuario, espacoUtilizado/1024**2.0, espacoUtilizado*100/espacoTotal)
- i += 1
- espacoTotalEmMB = espacoTotal/1024**2.0
- rodape = "\nEspaco total ocupado: %.2f MB\n" % (espacoTotalEmMB)
- rodape += "Espaco medio ocupado: %.2f MB\n" % (espacoTotalEmMB/i)
- saida += rodape
- saida += "\nPara colocar alinhado que nem estah no pdf, dah um trabalho..."
- saida += " que nem vale a pena "
- saida += "\n\nPergunta: Porque os nomes nao estao na mesma ordem da entrada ? E o que voce modificaria no programa para que eles ficassem?"
- arquivo.write(saida)
- # nunca se esqueca de fechar o arquivo que foi aberto
- arquivo.close()
- if __name__ == "__main__":
- try:
- main()
- except ValorInvalido, e:
- print e
- except LinhaNaoFormatada, e:
- print e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement