我目前正在尝试学习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)
Run Code Online (Sandbox Code Playgroud)
您的错误是由浮点算术错误引起的.以下是输入诸如的值时会发生的情况0.26.
change = 0.26
change -= 0.25
change -= 0.01
print (change) # 8.673617379884035e-18
Run Code Online (Sandbox Code Playgroud)
由于最后一个值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)
Run Code Online (Sandbox Code Playgroud)
例:
Please enter amount of change: 0.26
You need the following:
{'quarter': 1, 'dime': 0, 'nickel': 0, 'penny': 1}
Run Code Online (Sandbox Code Playgroud)
另外,您可以使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |