leocastro24 Postado Novembro 11, 2019 Denunciar Share Postado Novembro 11, 2019 (editado) ESTOU COM MUITA DIFICULDADE DE SIMPLIFICAR ESSA FUNÇÃO DE SAQUE NO MEU PROGRAMA, alguém ME AJUDA def imprime(n, x, i=0): if i == n: return 1 else: print("R${},00".format(x)) return imprime(n, x, i + 1) DEF SAQUE print("Notas disponiveis") relatorio(n100, n50, n20, n10, n5, n2, n1) if n100==0 and n50==0 and n20==0 and n10==0 and n5==0 and n2==0 and n1==0: print("Não possui notas no cofre") cofrinho(n100, n50, n20, n10, n5, n2, n1) valorSaque = int(input("Digite o valor a ser sacado: R$")) valorReservado = 0 snota100 = 0 snota50 = 0 snota20 = 0 snota10 = 0 snota5 = 0 snota2 = 0 snota1 = 0 if n100 != 0: retorna = (valorSaque - valorReservado) // 100 if (valorSaque - valorReservado) // 100 > n100: retorna = n100 snota100 = retorna valorReservado = valorReservado + (snota100 * 100) if n50 != 0: retorna = (valorSaque - valorReservado) // 50 if retorna > n50: retorna = n50 snota50 = retorna valorReservado = valorReservado + (snota50 * 50) if n20 != 0: retorna = (valorSaque - valorReservado) // 20 if retorna > n20: retorna = n20 snota20 = retorna valorReservado = valorReservado + (snota20 * 20) if n10 != 0: retorna = (valorSaque - valorReservado) // 10 if retorna > n10: retorna = n10 snota10 = retorna valorReservado = valorReservado + (snota10 * 10) if n5 != 0: retorna = (valorSaque - valorReservado) // 5 if retorna > n5: retorna = n5 snota5 = retorna valorReservado = valorReservado + (snota5 * 5) if n2 != 0: retorna = (valorSaque - valorReservado) // 2 if retorna > n2: retorna = n2 snota2 = retorna valorReservado = valorReservado + (snota2 * 2) if n1 != 0: retorna = (valorSaque - valorReservado) // 1 if retorna > n1: retorna = n1 snota1 = retorna valorReservado = valorReservado + (snota1 * 1) if valorSaque>=0: if valorReservado == valorSaque: n100 = n100 - snota100 n50 = n50 - snota50 n20 = n20 - snota20 n10 = n10 - snota10 n5 = n5 - snota5 n2 = n2 - snota2 n1 = n1 - snota1 print("Pegue seu dinheiro:") imprime(snota100, 100) imprime(snota50, 50) imprime(snota20, 20) imprime(snota10, 10) imprime(snota5, 5) imprime(snota2, 2) imprime(snota1, 1) else: print("Não temos notas suficiente para este saque") else: resp = str(input( "Saldo insuficiente. Temos apenas R${},00 em caixa.\n Deseja sacar esse valor (s/n)?".format(sal))) if resp == "s": n100 = n100 - snota100 n50 = n50 - snota50 n20 = n20 - snota20 n10 = n10 - snota10 n5 = n5 - snota5 n2 = n2 - snota2 n1 = n1 - snota1 print("Pegue seu dinheiro:") imprime(snota100, 100) imprime(snota50, 50) imprime(snota20, 20) imprime(snota10, 10) imprime(snota5, 5) imprime(snota2, 2) imprime(snota1, 1) if resp == "n": print("Não temos saldo suficiente para este saque") Editado Novembro 11, 2019 por leocastro24 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Novembro 11, 2019 Denunciar Share Postado Novembro 11, 2019 https://www.youtube.com/watch?v=prQ0TGPFFLk&t=2s esse video pode ajudar um pouco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 leocastro24 Postado Novembro 11, 2019 Autor Denunciar Share Postado Novembro 11, 2019 já assisti esse vídeo um pouco mais cedo, infelizmente não ajudou mas obrigado mesmo assim Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Novembro 11, 2019 Denunciar Share Postado Novembro 11, 2019 tentei executar seu script, mas falta algumas funçoes como relatorio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 leocastro24 Postado Novembro 11, 2019 Autor Denunciar Share Postado Novembro 11, 2019 o meu script completo é esse: from os import system, name def limpaTela(): if name == 'nt': system('cls') else: system('clear ') def teste(i=1): limpaTela() if i >= 5: # Finaliza o programa após 5 iterações exit() y = input("--> Enter para continuar ...") teste(i + 1) def imprime(n, x, i=0): if i == n: return 1 else: print("R${},00".format(x)) return imprime(n, x, i + 1) def deposito(n100, n50, n20, n10, n5, n2, n1, total=0): print("-- Para encerrar o depósito digite um valor negativo --") dep = int(input("Coloque o Dinheiro: R$")) if dep < 0: print("Valor depositado: R${}".format(total)) return cofrinho(n100, n50, n20, n10, n5, n2, n1) elif dep != 100 and dep != 50 and dep != 20 and dep != 10 and dep != 5 and dep != 2 and dep != 1: print("Nota de R${:.2f} não reconhecida".format(dep)) deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 100: total = total + dep n100 = n100 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 50: total = total + dep n50 = n50 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 20: total = total + dep n20 = n20 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 10: total = total + dep n10 = n10 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 5: total = total + dep n5 = n5 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 2: total = total + dep n2 = n2 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) elif dep == 1: total = total + dep n1 = n1 + 1 deposito(n100, n50, n20, n10, n5, n2, n1, total) def saldo(n100, n50, n20, n10, n5, n2, n1): print("Saldo atual: R${:.2f}".format((n100*100) + (n50*50) + (n20*20) + (n10*10) + (n5*5) + (n2*2) + (n1*1))) def relatorio(n100, n50, n20, n10, n5, n2, n1): print("Notas de R$100,00: {}\nNotas de R$50,00: {}\nNotas de R$20,00: {}\nNotas de R$10,00: {}\nNotas de R$5,00: {}\nNotas de R$2,00: {}\nNotas de R$1,00: {}".format(n100,n50,n20,n10,n5,n2,n1)) print("\nSaldo total: R${:.2f}".format((n100*100) + (n50*50) + (n20*20) + (n10*10) + (n5*5) + (n2*2) + (n1*1))) def finalizar(n100, n50, n20, n10, n5, n2, n1): if n100==0 and n50==0 and n20==0 and n10==0 and n5==0 and n2==0 and n1==0: print("Não possui notas no cofre") else: valortotal=(n100*100) + (n50*50) + (n20*20) + (n10*10) + (n5*5) + (n2*2) + (n1*1) a=input("Deseja sacar os R${}.00 antes de fechar (s/n)?".format(valortotal)) if a=="s": imprime(n100, 100) imprime(n50, 50) imprime(n20, 20) imprime(n10, 10) imprime(n5, 5) imprime(n2, 2) imprime(n1, 1) else: print("Até a próxima") return exit() def cofrinho(n100, n50, n20, n10, n5, n2, n1): a = int(input("1 - Depositar\n2 - Sacar\n3 - Saldo \n4 - Relatório\n5 - Finalizar\nEscolha uma opcao:")) if a == 1: deposito(n100, n50, n20, n10, n5, n2, n1) cofrinho(n100, n50, n20, n10, n5, n2, n1) if a == 2: print("Notas disponiveis") relatorio(n100, n50, n20, n10, n5, n2, n1) saldoDisp = ((n100 * 100) + (n50 * 50) + (n20 * 20) + (n10 * 10) + (n5 * 5) + (n2 * 2) + (n1)) if saldoDisp == 0: print("Não possui notas no cofre") cofrinho(n100, n50, n20, n10, n5, n2, n1) ValorSaque = int(input("Digite o valor a ser sacado: R%")) valorReservado = 0 saqueNota100 = 0 saqueNota50 = 0 saqueNota20 = 0 saqueNota10 = 0 saqueNota5 = 0 saqueNota2 = 0 saqueNota1 = 0 if n100 != 0: retorna = (ValorSaque - valorReservado) // 100 if retorna > n100: retorna = n100 saqueNota100 = retorna valorReservado = valorReservado + (saqueNota100 * 100) if n50 != 0: retorna = (ValorSaque - valorReservado) // 50 if retorna > n50: retorna = n50 saqueNota50 = retorna valorReservado = valorReservado + (saqueNota50 * 50) if n20 != 0: retorna = (ValorSaque - valorReservado) // 20 if retorna > n20: retorna = n20 saqueNota20 = retorna valorReservado = valorReservado + (saqueNota20 * 20) if n10 != 0: retorna = (ValorSaque - valorReservado) // 10 if retorna > n10: retorna = n10 saqueNota10 = retorna valorReservado = valorReservado + (saqueNota10 * 10) if n5 != 0: retorna = (ValorSaque - valorReservado) // 5 if retorna > n5: retorna = n5 saqueNota5 = retorna valorReservado = valorReservado + (saqueNota5 * 5) if n2 != 0: retorna = (ValorSaque - valorReservado) // 2 if retorna > n2: retorna = n2 saqueNota2 = retorna valorReservado = valorReservado + (saqueNota2 * 2) if n1 != 0: retorna = (ValorSaque - valorReservado) // 1 if retorna > n1: retorna = n1 saqueNota1 = retorna valorReservado = valorReservado + (saqueNota1 * 1) if saldoDisp >= ValorSaque: if valorReservado == ValorSaque: n100 = n100 - saqueNota100 n50 = n50 - saqueNota50 n20 = n20 - saqueNota20 n10 = n10 - saqueNota10 n5 = n5 - saqueNota5 n2 = n2 - saqueNota2 n1 = n1 - saqueNota1 print("Pegue seu dinheiro:") imprime(saqueNota100, 100) imprime(saqueNota50, 50) imprime(saqueNota20, 20) imprime(saqueNota10, 10) imprime(saqueNota5, 5) imprime(saqueNota2, 2) imprime(saqueNota1, 1) else: saq = 0 print("Não temos notas suficiente para este saque") else: resp = str(input( "Saldo insuficiente. Temos apenas R${},00 em caixa.\n Deseja sacar esse valor (s/n)?".format(saldoDisp))) if resp == "s": n100 = n100 - saqueNota100 n50 = n50 - saqueNota50 n20 = n20 - saqueNota20 n10 = n10 - saqueNota10 n5 = n5 - saqueNota5 n2 = n2 - saqueNota2 n1 = n1 - saqueNota1 print("Pegue seu dinheiro:") imprime(saqueNota100, 100) imprime(saqueNota50, 50) imprime(saqueNota20, 20) imprime(saqueNota10, 10) imprime(saqueNota5, 5) imprime(saqueNota2, 2) imprime(saqueNota1, 1) if resp == "n": print("Não temos saldo suficiente para este saque") cofrinho(n100, n50, n20, n10, n5, n2, n1) if a == 3: saldo(n100, n50, n20, n10, n5, n2, n1) cofrinho(n100, n50, n20, n10, n5, n2, n1) if a == 4: print("+---------------------------+\n| Relatório geral |\n+---------------------------+") relatorio(n100, n50, n20, n10, n5, n2, n1) cofrinho(n100, n50, n20, n10, n5, n2, n1) if a == 5: finalizar(n100, n50, n20, n10, n5, n2, n1) cofrinho(1,1,1,1,1,1,1) porém estou querendo simplificar essa função de saque e não estou conseguidno E também não estou conseguindo colocar essa função Enter para continuar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Novembro 11, 2019 Denunciar Share Postado Novembro 11, 2019 (editado) vou dar uma olhada só comentando, na segunda metade do video tem uma versão simplificada ----- seu script tem bastante recursão, recursão em python é mau otimizado, seria melhor colocar loops, e assim você vai diminuir muitas linhas, e deixar o script mais leve para longas execuções Editado Novembro 11, 2019 por ArteEN Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ArteEN Postado Novembro 13, 2019 Denunciar Share Postado Novembro 13, 2019 notas = [100, 50, 20, 10, 5, 2, 1] caixa = {x:0 for x in notas} contas = {'leo':0} def deposito(conta): print("-- Para cancelar o depósito digite zero --") dep = int(input(" Coloque o Dinheiro: R$")) if dep <= 0: print('\n-- Operação cancelada --') else: contas[conta] += dep for i in notas: caixa[i] += dep//i dep %= i print(('\n-- Deposito concluido --' '\n-- Saldo em conta --' f'\n R${contas[conta]:02.2f}')) deposito('leo') print() print(*caixa.items(), sep='\n') print(*contas.items(), sep='\n') aos poucos estou trabalhando no codigo, acho que com essa aproximação o codigo fica mais compacto Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
leocastro24
ESTOU COM MUITA DIFICULDADE DE SIMPLIFICAR ESSA FUNÇÃO DE SAQUE NO MEU PROGRAMA, alguém ME AJUDA
Editado por leocastro24Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.