Página 2 de 3 PrimeiroPrimeiro 123 ÚltimoÚltimo
+ Responder ao Tópico



  1. Sim cara, a função checaQntdeNota deve ser declarada antes do seu uso.

    Por acaso você ta fazendo o curso de Python do CDTC?? Quando eu fiz o teste final era uma questão como essa acabei resolvendo usando recursão. Se quiser o código que criei foi esse:

    Código :
    def calculaNotas(valor, notas=[100,50,10,5,1]):
        # Filtro de tipos
        if type(valor) not in [int, float, long]:
            raise TypeError, "Favor informar um número!"
     
        if type(notas) is not list:
            raise TypeError, "Favor informar as possíveis notas através de uma lista vá¡lida"
     
        # Converte para int
        valor = int(valor)
     
        notas_restantes = notas[:]
     
        # Verifica o fim da recursão
        if len(notas) is 0 or valor is 0:
            # Fim da recursão
            return None
     
        # Pega a primeira nota (FIFO)
        nota = notas_restantes.pop(0)
        # Calcula quantidade de notas de dado valor
        quantidade = valor/nota
        # Não é necessário verificar se a quantidade de notas é zero.
        valor = valor - nota*quantidade
        if quantidade is not 0:
            # Gera output
            print quantidade,'nota(s) de',nota,'reais'
        # Chama a recursão
        calculaNotas(valor, notas_restantes)

    Eu não implementei a idéia de limites de notas, o 'meu caixa' tinha notas infinitas XD. Mas esse algorítmo possibilita também definir os tipos de notas.

    Alguns testes:
    Código :
    >>> calculaNotas(135)
    1 nota(s) de 100 reais
    3 nota(s) de 10 reais
    1 nota(s) de 5 reais
    >>>
    >>> calculaNotas(12)
    1 nota(s) de 10 reais
    2 nota(s) de 1 reais
    >>>
    >>> calculaNotas(7)
    1 nota(s) de 5 reais
    2 nota(s) de 1 reais
    >>>
    >>> calculaNotas(1345)
    13 nota(s) de 100 reais
    4 nota(s) de 10 reais
    1 nota(s) de 5 reais
    >>>
    >>> calculaNotas(136, notas=[50,5,1])
    2 nota(s) de 50 reais
    7 nota(s) de 5 reais
    1 nota(s) de 1 reais

  2. Opa.

    Conseguei resolver o problema da função. Bastou mover a função para o início do programa.

    Valeu.



  3. Aprontei o meu. Ficou meio amadorzão e cheio de variáveis, mas valeu pra quem não tem muito contato com python.
    AInda tô pensando em como implementar o while ali. Sugestões?

    Código :
    #!/usr/bin/env python
    #-*- coding: iso8859-1 -*-
     
    #definição da função
    def CalculaNotas(ValorNota, qtdSaldoNota, saque, valorReservado):
            retorno = (saque - valorReservado) / ValorNota;
     
            if (retorno > qtdSaldoNota):
                retorno = qtdSaldoNota;
     
            return retorno;
     
    #variáveis (valores atribuídos)
    nota100 = 25;
    nota50 = 100;
    nota10 = 200;
    nota5 = 80;
    nota1 = 100;
     
    valorReservado = 0;
     
    saqueNota100 = 0;
    saqueNota50 = 0;
    saqueNota10 = 0;
    saqueNota5 = 0;
    saqueNota1 = 0;
     
    #saldo suposto total de grana na máquina 
    saldo = (nota100*100) + (nota50*50) + (nota10*10) + (nota5*5) + (nota1);
     
    #Aqui poderia ser empregado um while para escolha de opções, e para continuar a decrementar o caixa
     
    #Entrada do usuário
    saque = raw_input("Digite o valor do saque: ");
    saque = int(saque);
    print ("Voce deseja retirar: R$"), saque;
     
    #testes
    if (saldo > saque):
        if (saque > valorReservado):
            saqueNota100 = CalculaNotas(100, nota100, saque, valorReservado);
            valorReservado = valorReservado + (saqueNota100 * 100);
               if (saque > valorReservado):
                        saqueNota50 = CalculaNotas(50, nota50, saque, valorReservado);
                        valorReservado = valorReservado + (saqueNota50 * 50);
               if (saque > valorReservado):
                        saqueNota10 = CalculaNotas(10, nota10, saque, valorReservado);
                        valorReservado = valorReservado + (saqueNota10 * 10);
               if (saque > valorReservado):
                        saqueNota5 = CalculaNotas(5, nota5, saque, valorReservado);
                        valorReservado = valorReservado + (saqueNota5 * 5);
               if (saque > valorReservado):
                        saqueNota1 = CalculaNotas(1, nota1, saque, valorReservado);
                        valorReservado = valorReservado + (saqueNota1 * 1);
               if (valorReservado == saque):
            nota100 = nota100 - saqueNota100;
                       nota50 = nota50 - saqueNota50;
                       nota10 = nota10 - saqueNota10;
                       nota5 = nota5 - saqueNota5;
                       nota1 = nota1 - saqueNota1;
            print ("");
                       print ("Saque de R$"), saque, ("efetuado."), ("Foram necessárias"), saqueNota100, ("nota(s) de 100,"), saqueNota50, ("nota(s) de 50,"), saqueNota10, ("nota(s) de 10,"), saqueNota5, ("nota(s) de 5,"), ("e"), saqueNota1, ("nota(s) de 1");
               else:
                       saque = 0;
                       print ("Nao ha notas suficientes para o saque.");
    else:
        saque = 0;
        print ("Nao ha dinheiro suficiente para o saque");
     
    #relatório final
    saldo = saldo - saque;
    print ("");
    print ("Situacao atual: | ");
    print ("Notas de 100: "), nota100, (" | ");
    print ("Notas de  50: "), nota50, (" | " );
    print ("Notas de  10: "), nota10, (" | ");
    print ("Notas de   5: "), nota5, (" | ");
    print ("Notas de   1: "), nota1, (" | ");
    print ("Saldo       : "), saldo, (" | ");
     
    saque = 0;

    Valeu

  4. Ah, só mais uma coisa, tem dois erros de identação no seu código:
    1. A linha "valorReservado = valorReservado + (saqueNota100 * 100)" está com uma identação a mais.
    2. A linha "nota100 = nota100 - saqueNota100" está com uma identação a menos.

    Pra quem não conhece Python e acha que eu to sendo metódico por cauxa da identação: Python não utiliza chaves ({ e }) para identificar os blocos de código, ele utiliza o número de espaços antes da linha, ou seja, se seu código estiver identado incorretamente ele não roda!

    Outra coisa, em Python não precisa de ponto-e-vírgula ( ; ), pode tirar eles todos, e o print não exige os parênteses.

    No mais seu código funciona corretamente, mas acho que seria interessante informar quantas e quais notas foram sacadas.

    Fiz alguns testes com o seu código:
    Código :
    >>> 
    Digite o valor do saque: 123
    Voce deseja retirar: R$ 123
    1
    ('Saque de ', 123, 'efetuado.')
    Situacao atual: | 
    24  | 
    100  | 
    198  | 
    80  | 
    97  | 
    9877  |
    Essa saída da situação atual era pra ser toda na mesma linha? Se fora altera esse trecho de código:
    Código :
    print "Situacao atual: | ",
    print nota100, " | ",
    print nota50, " | " ,
    print nota10, " | ",
    print nota5, " | ",
    print nota1, " | ",
    print saldo, " | ",
    Um novo teste:
    Código :
    Digite o valor do saque: 123
    Voce deseja retirar: R$ 123
    1
    ('Saque de ', 123, 'efetuado.')
    Situacao atual: |  24  |  100  |  198  |  80  |  97  |  9877  | 
    >>>
    Qualquer coisa posta ai.
    Até mais...



  5. Tenho uma ideia pro while... Já posto






Tópicos Similares

  1. Dúvidas sobre criação de domínios
    Por Leo-SP no fórum Linguagens de Programação
    Respostas: 2
    Último Post: 16-12-2004, 07:06
  2. Dúvida sobre gerenciador de impressão!!!
    Por brunosal no fórum Servidores de Rede
    Respostas: 3
    Último Post: 29-11-2004, 07:49
  3. Opniao sobre compartilhadores de internet com wireless
    Por Rodrigo Moreno no fórum Redes
    Respostas: 8
    Último Post: 27-09-2004, 12:15
  4. Duvida sobre interfaces de rede.
    Por MAJOR no fórum Servidores de Rede
    Respostas: 0
    Último Post: 10-04-2004, 18:10
  5. duvida sobre redes de acesso
    Por no fórum Servidores de Rede
    Respostas: 0
    Último Post: 12-02-2004, 00:44

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L