[英]Change calculator only works if one type of coin needed
我目前正在嘗試學習python並且已經在/ r / learnpython上進行了初學者項目。 我對更改計算器項目的想法是創建一個包含鍵'quarter','dime','nickel'和'penny'的字典,每個字符的值都初始化為0.我的代碼,如下所示,似乎只在改變我輸入只需要一種類型的硬幣,即0.75 - > 3季度,0.1 - > 1角錢等。
change_map = {
'quarter' : 0,
'dime' : 0,
'nickel' : 0,
'penny' : 0
}
def calculator(change):
while change > 0:
if change >= 0.25:
change -= 0.25
change_map['quarter'] += 1
elif change < 0.25 and change >= 0.10:
change -= 0.10
change_map['dime'] += 1
elif change < 0.10 and change >= 0.05:
change -= 0.05
change_map['nickel'] += 1
elif change < 0.05 and change >= 0.01:
change -= 0.01
change_map['penny'] += 1
print "You need the following: "
print change_map
change = raw_input("Please enter amount of change: ")
change = float(change)
calculator(change)
您的錯誤是由浮點算術錯誤引起的 。 輸入0.26
的值時會出現這種情況。
change = 0.26
change -= 0.25
change -= 0.01
print (change) # 8.673617379884035e-18
由於最后一個change
值大於0
但小於0.01
,因此輸入無限循環。
解決這個問題的一種方法是依靠精確算術,使用int
而不是float
來表示離散值,例如貨幣。 這意味着使你的基本單位成為美分而不是美元。
change_map = {
'quarter' : 0,
'dime' : 0,
'nickel' : 0,
'penny' : 0
}
def calculator(change):
while change > 0:
if change >= 25:
change -= 25
change_map['quarter'] += 1
elif change >= 10:
change -= 10
change_map['dime'] += 1
elif change >= 5:
change -= 5
change_map['nickel'] += 1
else:
change -= 1
change_map['penny'] += 1
print ("You need the following: ")
print (change_map)
change = raw_input("Please enter amount of change: ")
# Here we convert the decimal value input by the user to cents
change = int(float(change) * 100)
calculator(change)
例:
Please enter amount of change: 0.26
You need the following:
{'quarter': 1, 'dime': 0, 'nickel': 0, 'penny': 1}
在一個側面說明,您可以通過使用提高你的解決方案dict
值和名稱硬幣。 特別是,這允許您通過更新dict
來擴展程序,而不必添加新的if語句。
這是一個增加美元作為變化的可能性的例子。
value_map = {
100: 'dollar',
25: 'quarter',
10: 'dime',
5: 'nickel',
1: 'penny'
}
def calculator(change):
change_map = {}
for value in sorted(value_map, reverse=True):
coin = value_map[value]
change_map[coin], change = divmod(change, value)
print ("You need the following: ")
print (change_map)
change = raw_input("Please enter amount of change: ")
change = int(float(change) * 100)
calculator(change)
我調試了你的代碼並注意到有一個無限循環。 可能是因為漂浮算術。 您可以聲明像epsilon值
eps = 1e-2
並分別更改while循環
while change > eps
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.