Ir ao conteúdo
  • Cadastre-se
Mikkel Gracey

(Python) Algoritmo de Caixa Eletrônico

Posts recomendados

Oi, sou iniciante em Python e preciso escrever um algoritmo que simule um caixa eletrônico, ele deve ler o valor de entrada de um saque e exibir a menor quantidade de notas possível.

Notas: R$ 2,00, R$ 5,00, R$ 10,00, R$ 20,00, R$ 50,00 e R$ 100,00.

Não há limite de saque.

O problema é que não há notas de R$ 1,00, então se o usuário digitar algo como R$ 6,00, o algoritmo deve recalcular para tentar atingir esse valor, no caso, ele deveria exibir três notas de R$ 2,00 na saída. E é exatamente isso que não estou conseguindo fazer.

Alguém sabe como fazer para verificar esses tipos de valores?

Estou usando o Python 3.7.4 e o Visual Studio Code.

Até agora, eu consegui fazer o seguinte:

saque = int(input('Digite o valor do saque: '))

if saque < 2 or saque == 3:
    print('Valor inválido!')

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

vinte = int(saque/20)
saque = saque % 20

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

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

dois = int(saque/2)
saque = saque % 2

print('{} Nota(s) R$ 100,00.' .format(cem))
print('{} Notas(s) R$ 50,00.' .format(cinquenta))
print('{} Notas(s) R$ 20,00.' .format(vinte))
print('{} Notas(s) R$ 10,00.' .format(dez))
print('{} Notas(s) R$ 5,00.' .format(cinco))
print('{} Notas(s) R$ 2,00.' .format(dois))

Obrigado :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz dessa forma, veja se lhe atende👍

print('='*30)
print("{:^30}".format("CAIXA ELETRÔNICO"))
print('='*30)

valor_do_saque = int(input('Digite o valor do saque: R$'))
total = valor_do_saque

print('\n\nAnalisando a transação....')
print('-[ Verificando disponiblidade de cédulas ]-')


cedula = 100
total_de_cedulas = 0

while True:

    if valor_do_saque >= cedula:
        valor_do_saque -= cedula
        total_de_cedulas += 1

    else:
        if total_de_cedulas > 0:
            print(f"Total de {total_de_cedulas} cédulas de R${cedula}...[OK]")

        if cedula == 100:
            cedula = 50

        elif cedula == 50:
            cedula = 20

        elif cedula == 20:
            cedula = 10

        elif cedula == 10:
            cedula = 5

        elif cedula == 5:
            cedula = 2


        total_de_cedulas = 0
        if valor_do_saque == 0:
            print('=' * 40)
            print(f"Transação realizada com sucesso!\nSaque no valor total de => : R${total}")
            exit()
        elif valor_do_saque == 1:
            print("\nOPERAÇÃO CANCELADA!"
                  "\nAs cédulas disponíveis neste caixa não permitem concluir esta transação.\n"
                  "Por favor, refaça sua operação com outro valor!")
            exit()

Os resultados na tela são esses:

image.png.f94418cd9f390f914ec121ca91eec5b2.png

 

E quando o valor termina em 1

image.png.a7f2ce5ae70c84b472d6bbff76b91403.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny Muito obrigado pela ajuda :) funciona muito bem, mas a proposta foi atualizada, se você puder olhar o post novamente por favor. Agora, certos valores podem ser sacados, como por exemplo: R$ 23,00, a saída seria:

1 nota de R$ 10,00;

1 nota de R$ 5,00;

4 notas de R$ 2,00.

 

O código está assim:

saque = int(input('Digite o valor do saque: '))
total = saque #Montante total que será decomposto
nota = 100 #Tirar 100 reais do montante
totalnotas = 0
while True:
    if total >= nota:
        total -= nota
        totalnotas += 1
    else:
        if totalnotas > 0:
            print('Total de {} notas de R$ {}' .format(totalnotas, nota))
        if nota == 100:
            nota = 50
        if nota == 50:
            nota = 20
        elif nota == 20:
            nota = 10
        elif nota == 10:
            nota = 5
        elif nota == 5:
            nota = 2
        totalnotas = 0
        if total == 0:
            break

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro usuário,

 

Seja bem-vindo ao Fórum do Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Fórum do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários.. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao digitar o valor do saque verifique se ele é uma valor par ou impar

 

Se for um par, o código deve ser executado até o primeiro exit(), e se for impar, voce deve deduzir dele 5 e considerar como pago no montante de notas no final, assim:

 

Digamos que o valor a ser sacado seja R$27,00

R$5,00 é uma nota obrigatória no seu cálculo

 

27 que é impar com menos 5 passa a 22(par), resulta em 1 cédula de R$5,00

passa a ter 22(par) que subtraído 20, resulta em 1 cédula de R$20,00

sobram 2 que subtraído 2, zera o valor total do saque e resulta em 1 cédula de R$2,00.

 

Veja:

1 nota de R$ 5,00;

1 nota de R$ 20,00

1 nota de 2.

Você pode colocar isso em uma lista e ordenar ela para imprimir em ordem crescente ou decrescente.

 

Não é difícil de fazer, tenta ai e boa sorte!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DiF Entendo, mas não é um trabalho de instituição ou algo do gênero, é só um exercício que quero resolver para melhorar o meu nível na linguagem. Todas as informações estão acima, uma boa parte do código já está pronta, só preciso descobrir a questão de como o meu algoritmo deve funcionar no caso de certos tipos de valores.

 

adicionado 1 minuto depois

@fspjonny Obrigado! Vou continuar tentando com base nas suas informações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!