Fiz diferente do que o enunciado pedia, visto que caso fosse informado qualquer valor ímpar, seria informado que não é possível realizar o saque. Mesmo que aja uma combinação possível.
Exemplo: Sacar 7 reais = 1 nota R$ 5,00 e 1 nota R$ 2,00.
Se seguir a lógica do % 2 == 0, esse saque seria impossível.
notas_disponíveis = {
100 : "R$ 100,00",
50 : "R$ 50,00",
20 : "R$ 20,00",
10 : "R$ 10,00",
5 : "R$ 5,00",
2 : "R$ 2,00"
}
# Crias as listas que terão seus componentes adicionados, caso o valor informado seja válido e possível de saque.
nota_sacada: list[str] = []
quantidade_sacada: list[int] = []
def informacao_notas() -> None:
"""Informa as notas que o sistema tem disponível para sacar."""
print("Notas disponíveis para saque:\n")
for valor in notas_disponíveis.values():
print(valor)
print()
def valor_saque(prompt: int) -> int:
"""Exibe as notas disponíveis e confere um valor de saque. Caso o valor seja inválido, o programa pede o valor novamente."""
informacao_notas()
while True:
try:
valor = int(input(prompt).strip())
break
except ValueError:
print("\nO valor inserido é inválido.")
print("Tente novamente.\n")
return valor
def contagem_notas() -> None:
"""Pede o valor do saque e o rateia para verificar a quandidate de notas necessárias e seu valor."""
saque = valor_saque("Insira o valor que deseja sacar: ")
for key,value in notas_disponíveis.items():
while saque >= key:
notas = int(saque / key)
saque = saque - (notas * key)
nota_sacada.append(value)
quantidade_sacada.append(notas)
if saque == 0:
for nota, qtd in zip(nota_sacada, quantidade_sacada):
print(f"Nota: {nota} - Quantidade: {qtd}")
# Caso o resto não seja 0, o programa informa que não é possível realizar o saque.
if saque != 0:
print("\nNão é possível sacar o montante informado.")
print("Finalizando programa...\n")
exit()
contagem_notas()