1

基本上它适用于我尝试过的几乎所有情况,除了 0.93。然后我在 while 循环中添加了“print money”,以查看它在每个循环之后做了什么,这就是发生的事情:

Enter an amount less than a dollar: 0.93
0.68
0.43
0.18
0.08
0.03
0.02
0.01
3.81639164715e-17
-0.01
Your change is 3 quarters 1 dimes 1 nickels 4 pennies

有人可以解释到底发生了什么吗?

money = input("Enter an amount less than a dollar: ")
quarter = 0
dime = 0
nickel = 0
penny = 0

while money > 0.00:
    if money >= 0.25:
        quarter = quarter + 1
        money = money - 0.25

    elif money >= 0.10:
        dime = dime+1
        money = money - 0.10

    elif money >= 0.05:
        nickel = nickel + 1
        money = money - 0.05

    else:
        penny = penny + 1
        money = money - 0.01



print "Your change is %d quarters %d dimes %d nickels %d pennies" % (quarter, dime, nickel, penny)
4

3 回答 3

14

浮点数不能准确地表示大多数小数,就像你不能用十进制浮点表示法准确地写出 1/3 的结果一样。

使用整数来计算美分,或使用decimal模块

顺便说一句,这与 Python 无关,而是与计算机通常进行浮点数学运算的方式有关。

于 2013-09-15T11:32:05.453 回答
2
amount = 93
quarters = amount // 25
amount = amount % 25
dimes = amount // 10
amount = amount * 10
nickel = amount // 5
cents = amount % 5

//是整数除法。%是模运算符(整数除法的余数)

有点想法你可以传入一个列表 [25,10,5,1] 并循环执行

于 2013-09-15T11:44:00.990 回答
0

您不能使用浮点精确地表达大多数分数。我认为整数是解决您的问题的最佳方法。我重写了您的代码以使用美分和 python 3。

cents = int(input("Enter a number of cents: "))
quarter = 0
dime = 0
nickel = 0
penny = 0

while cents > 0:
    if cents >= 25:
        quarter+=1
        cents-=25
    elif cents >= 10:
        dime+=1
        cents-=10
    elif cents >= 5:
        nickel+=1
        cents-=5
    else:
        penny+=1
        cents-=1
print ("Your change is %d quarters %d dimes %d nickels %d pennies" % (quarter, dime, nickel, penny)
于 2013-09-15T11:57:13.860 回答