Capa
Seções
NOTÍCIAS

DOWNLOAD

ANÁLISES

COMPRAS

BOLETIM

WIRED NEWS

IDG NOW!

PC WORLD

AJUDA

COLUNISTAS


 digite + enter


RESOLVENDO O ORÇAMENTO DA REPÚBLICA
Luciano Ramalho MAGNET

Agora que conhecemos o funcionamento básico dos dicionários, podemos implementar o nosso aplicativo de acerto de contas, que pode ser muito útil por exemplo na administração de uma república de universitários. Antes de mais nada, vejamos como vai funcionar o programa (listagem 8):

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 »

Copyright © 1999 MAGNET
Introdução

Somadora infinita

Mais sobre o while

Loops (quase) infinitos

Um programa mais tolerante

Como tratar um erro de verdade

Associação de nomes a valores

Resolvendo o Orçamento da República

Nossa primeira simulação

Copyright© 1996 - 2003 Terra Networks S.A. Todos os direitos reservados. All rights reserved.