【发布时间】:2014-02-06 16:20:09
【问题描述】:
我正在练习一些新获得的技能,并希望在社区中获得对以下代码的一些反馈。
目标:创建一个简单的程序,通过解构找零的组成部分(美元、四分之一等),帮助想象中的收银员返还正确的找零。 我能想到的最好方法是使用带有嵌套 while 循环的 if 语句。
2 个问题:
1)。尽管条件 runningTotal != change 不再满足,while 循环并未在脚本末尾终止。为什么会这样?是不是应该在满足该条件之前运行while,然后终止?我一定是遗漏了什么……你们有什么明显的遗漏吗?
2)。我仍然是一个初学者(你可能会说)。您对下面的脚本有什么反馈意见。我做的好、不好或只是一般想法的事情。我真的在努力变得更好,因此非常感谢您的 cmets。谢谢!
脚本:
def changeCalc(cost,pmt):
change = float(pmt - cost)
print("Total Change: " + str(change))
runningTotal = 0 #used to count up the change paid in the while loop below
#make sure they paid enough
if (pmt - cost) < 0:
print("The customer needs to pay " + str(abs(change)) + " more.")
else:
#check to see if any change is due
while runningTotal != change:
#how many DOLLAR bills to return
dollarBills = int(change - runningTotal)
print("Number of Dollar Bills: " + str(dollarBills))
#add to runningTotal
runningTotal = float(runningTotal + dollarBills)
print runningTotal
#how many QUARTERS to return
numOFqtrs = int((change - runningTotal)/(.25))
print("Number of Quarters: " + str(numOFqtrs))
#add to running total
runningTotal = float(runningTotal + (numOFqtrs * (.25)))
print runningTotal
#how many DIMES
numOFdimes = int((change - runningTotal)/(.10))
print("Number of Dimes: " + str(numOFdimes))
runningTotal = float(runningTotal + (numOFdimes * (.10)))
#how many NICKELS
print runningTotal
numOFnickels = int((change - runningTotal)/(.05))
print("Number of nickels: " + str(numOFnickels))
runningTotal = float(runningTotal + (numOFnickels * (.05)))
print runningTotal
#how many PENNIES
numOFpennies = int((change - runningTotal)/(.01))
print("Number of Pennies: " + str(numOFpennies))
runningTotal = float(runningTotal + (numOFpennies * (.01)))
print runningTotal
print change
#####WHY DOES THE LOOP NOT END HERE??????????##########
break
运行 changeCalc(87.63,103.86) 导致无限循环,输出如下。
Total Change: 16.23
Number of Dollar Bills: 16
16.0
Number of Quarters: 0
16.0
Number of Dimes: 2
16.2
Number of nickels: 0
16.2
Number of Pennies: 3
16.23
16.23
【问题讨论】:
-
用浮点数检查是否相等通常是不好的,特别是对于无法准确表示的 1/10。也许考虑使用整数表示美分,而不是使用浮点数表示美元。
-
或者你可以使用十进制docs.python.org/2/library/decimal.html
标签: python while-loop infinite-loop