Jump to content
Fórum Script Brasil
  • 0

CAIXA ELETRONICO


Question

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")
Edited by leocastro24
Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to post
Share on other 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

Edited by ArteEN
Link to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148681
    • Total Posts
      644509
×
×
  • Create New...