Listagem 8
1 D:\magnet\aprendaprog\cap04>python desprep1.py
2 Balanco de despesas da Republica Recanto Suico
3
4 (deixe um nome em branco para encerrar)
5
6 Digite o nome da pessoa: Marcos
7 Quanto gastou Marcos? 10
8 Digite o nome da pessoa: Alexandre
9 Quanto gastou Alexandre? 500
10 Digite o nome da pessoa: Tyrone
11 Quanto gastou Tyrone? 250
12 Digite o nome da pessoa: Harley
13 Quanto gastou Harley? 124,67
14 Numero invalido.
15 Quanto gastou Harley? 124.67
16 Digite o nome da pessoa:
17
18 Numero de pessoas: 4
19 Total de gastos: R$ 884.67
20 Gastos por pessoa: R$ 221.17
21
22 Saldo de Marcos: -211.17
23 Saldo de Alexandre: 278.83
24 Saldo de Tyrone: 28.83
25 Saldo de Harley: -96.50
26
27 D:\magnet\aprendaprog\cap04>
|
Linha 1: invocação do programa a partir da linha de comando.
Linhas 2 e 4: apresentação e instruções de uso.
Linha 6: o programa pergunta o nome de uma pessoa.
Linha 7: a seguir, solicita o valor dos gastos daquela pessoa.
Linhas 8 a 12: o processo é repetido quantas vezes for necessário.
Linha 13: o usuário digita um número com vÃrgula no lugar do ponto decimal.
Linha 14: o programa informa que o numero é "inválido".
Linha 15: novamente o programa pede o valor gasto por Harley.
Linha 16: o usuário não fornece outro nome, encerrando a digitação.
Linhas 18 a 20: o número de pessoas, o total gasto e o gasto médio por pessoa são calculados.
Linhas 22 a 25: para cada pessoa, o programa exibe seu saldo. Aqueles que têm saldo negativo têm valores a pagar; os que de saldo positivo têm valores a receber.
Agora, vamos à listagem do programa desprep1.py (listagem 9):
Listagem 9
1 #desprep1.py - calculo de despesas da republica
2
3 print 'Balanco de despesas da Republica Recanto Suico'
4 print
5 print '(deixe um nome em branco para encerrar)'
6 print
7 total = 0
8 contas = {}
9 while 1:
10 pessoa = raw_input('Digite o nome da pessoa: ')
11 if not pessoa: break
12 while 1:
13 resp = raw_input('Quanto gastou %s? ' % pessoa)
14 try:
15 gasto = float(resp)
16 break
17 except:
18 print 'Numero invalido.'
19 contas[pessoa] = gasto
20 total = total + gasto
21
22 num_pessoas = len(contas)
23 print
24 print 'Numero de pessoas: %d' % num_pessoas
25 print 'Total de gastos: R$ %.2f' % total
26 media = total/num_pessoas
27 print 'Gastos por pessoa: R$ %.2f' % media
28 print
29 for nome in contas.keys():
30 saldo = contas[nome] - media
31 print 'Saldo de %s: %.2f' % (nome, saldo)
|
Linhas 3 a 5: exibir identificação e instruções.
Linha 7: a variável total é inicializada com o valor zero. Isso é necessário em função da linha 21.
Linha 8: o dicionário de contas é criado, sem conteúdo. Ele armazenará as contas de cada pessoa.
Linha 9: inÃcio do loop principal.
Linha 10: solicitamos um nome e armazenamos na variável pessoa.
Linha 11: se a variável pessoa estiver vazia, nenhum nome foi digitado. Então executamos um break para deixar o loop principal, já que o usuário não quer mais fornecer nomes.
Linha 12: inÃcio do loop secundário, para digitação do valor numérico.
Linha 13: solicitamos o valor gasto pela pessoa em questão.
Linha 14: inÃcio do bloco try, onde tentaremos converter a string digitada em número.
Linha 15: a conversão fatÃdica. Em caso de erro aqui, o programa saltará para o bloco except, na linha 17.
Linha 16: esse break só será executado se não ocorrer erro na linha 15. Sua função é interromper o loop secundário quando obtivermos um valor numérico.
Linhas 17 e 18: o bloco except simplesmente exibe na tela a mensagem "Numero invalido". Aqui se encerra o loop secundário, que repetirá novamente a partir da linha 12, solicitando outro valor.
Linha 19: o gasto obtido é armazenado no dicionário, usando o nome da pessoa como chave.
Linha 20: o total de gastos é atualizado. Aqui é o final do loop principal. Daqui o programa voltará para a linha 9, e pedirá os dados da próxima pessoa.
Linha 22: a função len() é usada para contar o número de itens no dicionário.
Linhas 23 a 25: são exibidos o número de pessoas e total gasto. A notação %.2f faz com que os gastos apareçam com duas casas decimais, pois trata-se de um valor em dinheiro.
Linhas 26 a 27: o gasto por cabeça é calculado e mostrado, também com duas casas decimais.
Linha 29: aqui começamos um loop for que será repetido para cada nome que constar na lista de chaves do dicionário. A lista de chaves é obtida através do método keys(). A variável nome apontará, sucessivamente, para cada nome encontrado nesta lista.
Linha 30: os valor gasto por uma pessoa é obtido acessando o dicionário com a expressão contas[nome]. SubtraÃmos o gasto médio para obter o saldo daquela pessoa.
Linha 31: exibimos o nome e o saldo da pessoa. Esta é a última linha do loop for, que percorrerá todas as chaves do dicionário.
» Nossa primeira simulação »