Enviar um café pro programador

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?


16 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
    Respostas
    1. Meu exercido é o mesmo porém só consigo usar o Portugol pelo celular, será que alguém pode me ajudar?

      Excluir
  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
  9. Meu codigo >>>

    valorSaque = int(input("Qual o valor deseja sacar?"))

    while valorSaque < 10 or valorSaque > 600:
    print("Valor Inválido.\nValores disponiveis de R$10 a R$600\n")
    valorSaque = int(input("Qual o valor deseja sacar?"))

    nota100 = valorSaque // 100
    nota50 = (valorSaque % 100) // 50
    nota10 = (((valorSaque % 100) % 50) // 10)
    nota5 = ((((valorSaque % 100) % 50) % 10) // 5)
    nota1 = (((((valorSaque % 100) % 50) % 10) % 5) // 1)


    print("\nVoce Sacou:\n%d notas de R$100\n%d notas de R$50\n%d notas de R$10\n%d notas de R$5\n"
    "%d notas de R$1\n" %(nota100,nota50,nota10,nota5,nota1))

    ResponderExcluir
  10. valorSaque = int(input("Qual o valor deseja sacar?"))

    while valorSaque < 10 or valorSaque > 600:
    print("Valor Inválido.\nValores disponiveis de R$10 a R$600\n")
    valorSaque = int(input("Qual o valor deseja sacar?"))

    nota100 = valorSaque // 100
    nota50 = (valorSaque % 100) // 50
    nota10 = (((valorSaque % 100) % 50) // 10)
    nota5 = ((((valorSaque % 100) % 50) % 10) // 5)
    nota1 = (((((valorSaque % 100) % 50) % 10) % 5) // 1)


    print("\nVoce Sacou:\n%d notas de R$100\n%d notas de R$50\n%d notas de R$10\n%d notas de R$5\n"
    "%d notas de R$1\n" %(nota100,nota50,nota10,nota5,nota1))

    ResponderExcluir
  11. # -*- coding: utf-8 -*-
    saque = float(input('Valor do saque: (min R$10 - max R$600): R$'))

    if saque < 10 or saque > 600:
    print('Valor Inválido!')
    else:
    notas_100 = int(saque / 100)
    notas_50 = int((saque % 100) / 50)
    notas_10 = int((saque % 50) / 10)
    notas_5 = int((saque % 10) / 5)
    notas_1 = int((saque % 5) / 1)
    print(f'Você precisará de:\n\
    {notas_100} nota(s) de R$100\n\
    {notas_50} nota(s) de R$50\n\
    {notas_10} nota(s) de R$10\n\
    {notas_5} nota(s) de R$5\n\
    {notas_1} nota(s) de R$1')

    ResponderExcluir
  12. Olá , segue script que leva em conta o plural da quantidade de notas!!

    print('Olá o valor mínimo de saque é 10 reais e o valor máximo é 600 reias !!')
    print('Notas disponíveis 1, 5, 10, 50 e 100 reias.')
    saque = str(input('Digite o valor do seu saque : '))

    if len(saque) == 2:
    cen = 0
    dez = int(saque[0])
    und = int(saque[1])
    elif len(saque) == 3:
    cen = int(saque[0])
    dez = int(saque[1])
    und = int(saque[2])
    resp = []

    if cen == 1:
    resp.append(f'{cen} nota de cem')
    if cen > 1:
    resp.append(f'{cen} notas de cem')
    if dez == 1:
    resp.append(f'{dez} nota de dez')
    if 1 < dez < 5:
    resp.append(f'{dez} notas de dez')
    if dez == 5:
    resp.append(f'{1} nota de cinquenta')
    if dez > 5:
    resp.append(f'{1} nota de cinquenta')
    if dez - 5 == 1:
    resp.append(f'{1} nota de dez')
    else:
    resp.append(f'{dez - 5} notas de dez')
    if und == 1:
    resp.append(f'{und} nota de um')

    if 1 < und < 5:
    resp.append(f'{und} notas de um')
    if und == 5:
    resp.append(f'{1} nota de cinco')
    if und > 5:
    resp.append(f'{1} nota de cinco')
    if und - 5 == 1:
    resp.append(f'{1} nota de um')
    else:
    resp.append(f'{und - 5} notas de um')

    resp_certa = [str(a) for a in resp]
    print(" , " . join(resp_certa))

    ResponderExcluir
  13. Estava quebrando a cabeça para descobrir como fazer o programa mostrar apenas a quantidade das notas que de fato serão sacadas, depois de 3 horas vi que é apenas testar cada um com if se é > 0, segue o código:

    valor_saque = int(input('Digite o valor que deseja sacar: '))

    if valor_saque < 10:
    print('\nO valor mínimo a se sacar é de R$10,00!\n')
    elif valor_saque > 600:
    print('\nO valor máximo a se sacar é de R$600,00!\n')
    else:
    notas100 = valor_saque // 100
    valor_saque = valor_saque - notas100 * 100

    notas50 = valor_saque // 50
    valor_saque = valor_saque - notas50 * 50

    notas10 = valor_saque // 10
    valor_saque = valor_saque - notas10 * 10

    notas5 = valor_saque // 5
    valor_saque = valor_saque - notas5 * 5

    notas1 = valor_saque // 1
    valor_saque = valor_saque - notas1

    print('\nVocê sacará: \n')

    if notas100 > 0:
    print(f'{notas100} nota(s) de 100 reais')
    if notas50 > 0:
    print(f'{notas50} nota(s) de 50 reais')
    if notas10 > 0:
    print(f'{notas10} nota(s) de 10 reais')
    if notas5 > 0:
    print(f'{notas5} nota(s) de 5 reais')
    if notas1 > 0:
    print(f'{notas1} notas de 1 real')

    print('\nObrigado por utilizar meu programa :)\n')

    ResponderExcluir