Ao mesmo tempo que é possível sacar números ímpares, alguns números pares podem dar erro. Tanto que na própria saída esperada há um erro, já que o valor era 188 e apenas 187 são apresentados na solução.
Minha sugestão para evitar esse erro:
def mostra_cedulas(notas: dict) -> None:
print("\nCédulas disponíveis: ")
for nota in notas:
print(f"R$ {nota},00")
def mostra_saque(notas: dict) -> None:
print("Cédulas entregues:")
for nota in notas:
print(f"{notas[nota]} de R$ {nota},00")
def verifica_saque(valor: int) -> bool:
return valor <= 0 or valor == 1 or valor == 3
def verifica_terminal(numero: int) -> bool:
return numero % 10 in {1, 3, 6, 8}
def calcula_saque(valor: int, notas: dict) -> dict:
if verifica_terminal(valor):
valor -= 4
notas[2] += 2
for nota in notas:
if valor > 0:
notas[nota] += valor // nota
valor %= nota
return notas
def main():
cedulas = {
200: 0,
100: 0,
50: 0,
20 : 0,
10: 0,
5: 0,
2: 0}
try:
mostra_cedulas(cedulas)
valor = int(input("\nDigite o valor do saque: "))
if verifica_saque(valor):
raise ValueError
saque = calcula_saque(valor, cedulas)
mostra_saque(saque)
except ValueError:
print("Digite um valor numérico válido.")
main()