有人能帮我解决这个换硬币的问题吗?

2024-06-23 19:18:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图改变很多事情,但最终总是没有结果。该项目应输出支付给客户所需的最低硬币数量

当我运行程序时,它确实会要求我在上输入,但我没有得到任何输出,程序也没有结束

import cs50

dollars = float(input("Change Owed: "))
quarters = 0
nickels = 0
dimes = 0
pennies = 0
total_coins = 0


while (dollars<=0):
    dollars = float(input("Change Owed: "))
    continue

while (dollars > 0 ):
    if (dollars >= .25):
        dollars = dollars - .25
        quarters = quarters + 1
        total_coins = total_coins + 1

    if (dollars < .25 and dollars >= .10):
        dollars = dollars - .10
        dimes = dimes + 1
        total_coins = total_coins + 1

    if(dollars < .10 and dollars >= .5):
        dollars = dollars - .5
        nickels = nickels + 1
        total_coins = total_coins + 1

    if (dollars >= .1 and dollars < .5):
        dollars = dollars - .1
        pennies = pennies + 1
        total_coins = total_coins + 1


print ("Quarters: " + str(quarters))
print ("Dimes: " + str(dimes))
print ("Nickels: " + str(nickels))
print ("Pennies: " + str(pennies))
print (total_coins)

Tags: and程序inputiffloatchangetotalprint
1条回答
网友
1楼 · 发布于 2024-06-23 19:18:06

我看到的最有可能使这个循环永远运行的错误是,您在某些位置为镍币和便士指定了错误的值。(在美元输入上循环有点奇怪,但据我所知,这是不可行的,除非用户明确输入一个负数。如果你想检查无效输入,你还需要检查根本不是数字的输入!)

事实上,您必须为每枚硬币重复相同的代码,每次重复相同的值,这使得这类错误很容易潜入。这里有一个建议的方法,可以让您只指定一次每个硬币(这样可以很容易地检查值是否正确):

from collections import defaultdict
from enum import Enum
from typing import Dict


class Coin(Enum):
    QUARTERS = 0.25
    DIMES = 0.10
    NICKELS = 0.05
    PENNIES = 0.01


while True:
    try:
        dollars = float(input("Change Owed: "))
        assert dollars > 0
        break
    except AssertionError:
        print("I can only dispense non-negative amounts of change!")
    except ValueError:
        print("That's not even a number!")
num_coins: Dict[Coin, int] = defaultdict(int)

for coin in Coin:
    while dollars >= coin.value:
        num_coins[coin] += 1
        dollars -= coin.value

for coin in Coin:
    print(f"{coin.name.title()}: {num_coins[coin]}")
print(f"Total coins: {sum(num_coins.values())}")

这种方法的一个巧妙之处是,您可以非常轻松地添加其他种类的硬币(如HALF_DOLLAR = 0.50),代码只需将这一行添加到枚举中即可

相关问题 更多 >

    热门问题