2 回答

TA貢獻1765條經驗 獲得超5個贊
while由于浮點數的內部表示引起的與浮點值相關的一些舍入錯誤,您的程序正在運行無限循環。因此,要修復這些錯誤,我們可以使用round()函數在每次循環迭代owed結束時對值進行四舍五入:while
elif owed % 0.25 != 0:
while owed > 0:
if (owed - 0.25) >= 0:
coins += 1
owed -= 0.25
elif (owed - 0.10) >= 0:
coins += 1
owed -= 0.10
elif (owed - 0.05) >= 0:
coins += 1
owed -= 0.05
elif (owed - 0.01) >= 0:
coins += 1
owed -= 0.01
owed = round(owed, 3) # In this line, we roundoff the value of owed
print(int(coins))
exit()
這很好用。
希望這可以幫助 :)

TA貢獻1829條經驗 獲得超4個贊
while由于浮點錯誤,您的程序卡在循環中。嘗試在while循環中添加以下代碼,您會看到 whileowed確實變得無限小,它永遠不會變為零:
...
while owed > 0:
print(owed)
...
輸出:
...
8.326672684688674e-17
8.326672684688674e-17
8.326672684688674e-17
8.326672684688674e-17
...
考慮將輸入乘以100然后將其作為整數處理:
owed = int(float(input("How much change is owed? $")) * 100)
quarters = int(owed / 25)
dimes = int((owed - quarters * 25) / 10)
nickels = int((owed - quarters * 25 - dimes * 10) / 5)
cents = int((owed - quarters * 25 - dimes * 10 - nickels * 5))
coins = (quarters + dimes + nickels + cents)
print('Quarters (${}): {}'.format(quarters*0.25, quarters))
print('Dimes (${}): {}'.format(dimes*0.1, dimes))
print('Nickels (${}): {}'.format(nickels*0.05, nickels))
print('Cents (${}): {}'.format(cents, cents))
print('Coins:', coins)
或者,如果您想堅持使用貪心算法:
owed = int(float(input("How much change is owed? $")) * 100)
while owed > 0:
if (owed - 25) >= 0:
coins += 1
owed -= 25
elif (owed - 10) >= 0:
coins += 1
owed -= 10
elif (owed - 5) >= 0:
coins += 1
owed -= 5
elif (owed - 1) >= 0:
coins += 1
owed -= 1
coins = (quarters + dimes + nickels + cents)
print('Quarters (${}): {}'.format(quarters*0.25, quarters))
print('Dimes (${}): {}'.format(dimes*0.1, dimes))
print('Nickels (${}): {}'.format(nickels*0.05, nickels))
print('Cents (${}): {}'.format(cents, cents))
print('Coins:', coins)
輸出
>>> How much change is owed? $1.42
Quarters ($1.25): 5
Dimes ($0.1): 1
Nickels ($0.05): 1
Cents ($2): 2
Coins: 9
有關浮點限制的更多信息,請查看以下內容:https ://docs.python.org/3.8/tutorial/floatingpoint.html
添加回答
舉報