Ir para conteúdo
Fórum Script Brasil
  • 0

CAIXA ELETRONICO


leocastro24

Pergunta

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 por leocastro24
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

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 

Link para o comentário
Compartilhar em outros sites

  • 0

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 por ArteEN
Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...