Ajude nosso projeto a se manter online, faça um PIX de qualquer valor:
programacao.progressiva@gmail.com

Contar Cédulas de Dinheiro em um Caixa Eletrônico em Python

"Faça um Programa para um caixa eletrônico. O programa deverá perguntar ao usuário a valor do saque e depois informar quantas notas de cada valor serão fornecidas. As notas disponíveis serão as de 1, 5, 10, 50 e 100 reais. O valor mínimo é de 10 reais e o máximo de 600 reais. O programa não deve se preocupar com a quantidade de notas existentes na máquina.
  • Exemplo 1: Para sacar a quantia de 256 reais, o programa fornece duas notas de 100, uma nota de 50, uma nota de 5 e uma nota de 1;
  • Exemplo 2: Para sacar a quantia de 399 reais, o programa fornece três notas de 100, uma nota de 50, quatro notas de 10, uma nota de 5 e quatro notas de 1.

"

Contar Notas e Cédulas em Python

Há várias maneiras diferentes de darmos 256 reais, ou qualquer outro valor.
Poderíamos, por exemplo dar 256 cédulas de 1 real (hoje em dia só moeda, mas antes tinha cédula de 1 real sim).

Mas seria altamente inconveniente sair de um caixa eletrônico com centenas de cédulas. Ou seja, queremos usar o menor número de cédulas possíveis!

Isso é feito da seguinte maneira: dando cédulas de valor alto.

  • Notas de R$ 100,00

O primeiro passo é tentar empurrar o maior número de notas de 100 reais possível. No caso de 256 reais, só podemos dar 2 notas de 100 reais, pois se dermos mais, passa de 256.

Como fazemos isso?
Dividindo o valor que o usuário pediu pra sacar por 100.
Vamos colocar em 'numero', o valor que ele solicitou que fosse sacado.

Se fizermos:
cem = numero / 100

Teremos que cem=2.56
Não seria legal se a gente tirasse esse ponto fluante e essa parte decimal?
É fácil fazer isso, só usar a função int(), que vai transformar esse número em inteiro (ele pega a parte inteira e descarta o resto).

Assim, o número de cédulas de 100 reais é:
cem = int( numero/10 )

Se antes queríamos sacar 256 reais, agora queremos somente 56, pois já demos os 200 reais.

Vamos transformar nosso valor de 256 pra 56 da seguinte maneira:
numero = numero - (cem*100)
(numero = 256 - 2*100 = 56)

Concorda?

  • Notas de R$ 50,00

Agora vamos tentar usar o máximo possível de notas de 50 reais.
Para isso, basta dividir nosso número por 50 e pegar a parte inteira, como fizemos com as cédulas de 100:

cinquenta =int( numero/50 )

No nosso exemplo de 256 reais: cinquenta = int(56/50) = int(1.12) = 1

Agora que já usamos as de 50 reais, vamos tirar ela de nosso número:
numero = numero - (cinquenta*50)
(numero = 56 - 1.50)

  • Notas de R$ 10,00

A lógica é a mesma:

dez = int( numero/10 )
numero = numero - (dez*10)

  • Notas de R$ 5,00

cinco = int(numero/5)
numero = numero - (cinco*5)

E o que sobrou, é nota de um real:
um = numero

Nosso código Python fica?

    numero = int(input('Valor para sacar [10-600]: '))

    cem = int(numero / 100)
    numero = numero - (cem*100)
    
    cinquenta = int(numero/50)
    numero = numero - (cinquenta*50)

    dez = int(numero/10)
    numero = numero - (dez*10)

    cinco = int(numero/5)
    numero = numero - (cinco*5)

    um = numero
    
    print('Notas R$100,00 = ',cem)
    print('Notas R$ 50,00 = ',cinquenta)
    print('Notas R$ 10,00 = ',dez)
    print('Notas R$  5,00 = ',cinco)
    print('Notas R$  1,00 = ',um)


Nosso código também poderia ser:

    numero = int(input('Valor para sacar [10-600]: '))

    cem = int(numero / 100)
    numero = numero % 100
    
    cinquenta = int(numero/50)
    numero = numero % 50

    dez = int(numero/10)
    numero = numero % 10

    cinco = int(numero/5)
    numero = numero % 5

    um = numero
    
    print('Notas R$100,00 = ',cem)
    print('Notas R$ 50,00 = ',cinquenta)
    print('Notas R$ 10,00 = ',dez)
    print('Notas R$  5,00 = ',cinco)
    print('Notas R$  1,00 = ',um)

Consegue entender o motivo?


9 comentários:

  1. print("Valor mínimo do saque: R$10,00.")
    print("Valor máximo do saque: R$600,00")
    saque = int(input("Valor do saque: R$"))

    while(saque<10) or (saque>600):
    print("Valor fora dos limites.")
    saque = int(input("Digite novamente: R$"))

    if(saque>=10) and (saque<=600):
    resto1 = saque % 100
    resto2 = resto1 % 50
    resto3 = resto2 % 10
    resto4 = resto3 % 5
    nota100,nota50,nota10,nota5,nota1 = saque//100,resto1//50,resto2//10,resto3//5,resto4//1
    print("R$100,00:",nota100)
    print("R50,00:",nota50)
    print("R$10,00:",nota10)
    print("R$5,00:",nota5)
    print("R$1,00:",nota1)

    ResponderExcluir
  2. #FIZ DIFERENTE
    print("Valor mínimo do saque: R$10,00.")
    print("Valor máximo do saque: R$600,00")
    saque = int(input("Valor do saque: R$"))

    while(saque<10) or (saque>600):
    print("Valor fora dos limites.")
    saque = int(input("Digite novamente: R$"))

    if(saque>=10) and (saque<=600):
    resto1 = saque % 100
    resto2 = resto1 % 50
    resto3 = resto2 % 10
    resto4 = resto3 % 5
    nota100,nota50,nota10,nota5,nota1 = saque//100,resto1//50,resto2//10,resto3//5,resto4//1
    print("R$100,00:",nota100)
    print("R50,00:",nota50)
    print("R$10,00:",nota10)
    print("R$5,00:",nota5)
    print("R$1,00:",nota1)

    ResponderExcluir
  3. preciso ainda hoje de ajuda nessa questão : Escreva um programa em Python que será utilizado em um novo caixa automático de banco, que ao receber um valor em reais informe a quantidade de cada tipo de cédula e moedas necessárias para ser fornecida.
    O caixa trabalha com as seguintes cédulas e moedas:

    * Cédulas de: R$ 200,00, R$ 100,00, R$ 50,00, R$ 20,00, R$ 10,00, R$ 5,00 e R$ 2,00.
    * Modelas de: R$ 1,00, R$ 0,50, R$ 0,25, R$ 0,10, R$ 0,05 e R$ 0,01.

    ResponderExcluir
  4. Na real esse "int(numero / 100)" pode ser trocado por "numero // 100"

    ResponderExcluir
  5. #FIZ DIFERENTE
    valor = int(input('Qual o valor que você deseja sacar? '))

    #Quantidade de notas de 100
    a = valor // 100
    a2 = valor % 100

    #Quantidade de notas de 50
    b = a2 // 50
    b2 = a2 % 50

    #Quantidade de notas de 20
    c = b2 // 20
    c2 = b2 % 20

    #Quantidade de notas de 10
    d = c2 // 10
    d2 = c2 % 10

    #Quantidade de notas de 5
    e = d2 // 5
    e2 = d2 % 5

    #Quantidade de notas de 2
    f = e2 // 2
    f2 = e2 % 2

    #Quantidade de notas 1
    g = f2 // 1

    print('Serão sacadas: ')
    print(a, 'nota(s) de 100')
    print(b, 'nota(s) de 50')
    print(c, 'nota(s) de 20')
    print(d, 'nota(s) de 10')
    print(e, 'nota(s) de 5')
    print(f, 'nota(s) de 2')
    print(g, 'nota(s) de 1')

    ResponderExcluir
  6. n1=0
    n5=0
    n10=0
    n50=0
    n100=0




    saque = int(input("Digite o valor a ser sacado( minimo: R$10: maximo: R$ 600): R$ "))
    if saque < 10 or saque > 600:
    print("o valor digitado não pode ser sacado")
    else:
    n100= saque//100
    resto= saque%100
    n50= resto//50
    resto %= 50
    n10= resto//10
    resto %=10
    n5= resto//5
    resto %=5
    n1= resto//1

    valorsacado=n1*1+n5*5+n10*10+n50*50+n100*100
    print("O valor sacado: R$ ", valorsacado)
    print("Notas de R$ 100:", n100)
    print("Notas de R$ 50:", n50)
    print("Notas de R$ 10:", n10)
    print("Notas de R$ 5:", n5)
    print("Notas de R$ 1:", n1)

    ResponderExcluir
  7. valor: float = float(input())

    papel: list = [100.00, 50.00, 20.00, 10.00, 5.00, 2.00]

    print('NOTAS:')
    for i in papel:
    print(f'{int(valor // i)} nota(s) de R$ {i}')
    valor %= i
    mais simples ainda kkk

    ResponderExcluir
  8. Tentei deixar o meu com o resultado mais limpo, onde só mostra o que a pessoa vai receber:
    saque = int(input("Digite o valor do saque (mínimo 10, máximo 600): "))

    #Encerrar o script caso o saque seja menor que 10 ou maior que 600
    if saque < 10 or saque > 600:
    quit("Saque invalido.")

    #Executa os cálculos só após confirmar que o saque é valido
    nota100 = saque // 100
    resto100 = saque % 100
    nota50 = resto100 // 50
    resto50 = resto100 % 50
    nota10 = resto50 // 10
    resto10 = resto50 % 10
    nota1 = resto10 // 1
    print(f"Com o saque de {saque} você vai receber: ")
    if nota100 != 0:
    print(f"{nota100} de notas de 100")
    if nota50 != 0:
    print(f"{nota50} de notas de 50")
    if nota10 != 0:
    print(f"{nota10} de notas de 10")
    if nota1 != 0:
    print(f"{nota1} de notas de 1")

    Exemplo com o valor 400:
    Digite o valor do saque (mínimo 10, máximo 600): 400
    Com o saque de 400 você vai receber:
    4 de notas de 100

    Exemplo com valor 211:
    Digite o valor do saque (mínimo 10, máximo 600): 211
    Com o saque de 211 você vai receber:
    2 de notas de 100
    1 de notas de 10
    1 de notas de 1

    ResponderExcluir