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

10 進浮動小数点表記を使用して 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

ほとんどの分数は、浮動小数点を使用して正確に表すことはできません。あなたの場合、整数が問題の最良の解決策だと思います。cents と 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 に答える