Python实现1美元所有零钱组合:嵌套循环代码无法生成4 quarters组合的修复咨询
修复1美元零钱组合代码的问题
嘿,这个问题我太熟了——根源就是Python的range()函数是左闭右开的,你刚好踩了这个小坑!
问题出在哪?
你看,range(n)只会生成从0到n-1的整数,完全不会包含n本身:
- 你的
total_quarters是4,所以range(total_quarters)生成的是0、1、2、3,quarter变量永远到不了4,自然打不出全quarters的组合。 - 同理,dime和nickel的循环也有同样问题:比如当剩余金额刚好能被10整除时,最大的dime数量会被漏掉;nickel也是一样。
修复方案
只需要给每个range()的上限都加1,让它包含我们需要的最大硬币数量就行:
print("Change for $1") dollar = 1 total_pennies = int(dollar * 100) # 100 pennies in a dollar total_quarters = int(total_pennies / 25) # 4 quarters in a dollar # 修复:range上限+1,包含最大可能的硬币数量 for quarter in range(total_quarters + 1): remaining_quarter = total_pennies - quarter * 25 # 同理,dime的range也要+1,覆盖所有可能的dime数量 for dime in range(int(remaining_quarter / 10) + 1): remaining_dimes = remaining_quarter - dime * 10 # nickel的range同样+1,包含刚好凑整的情况 for nickel in range(int(remaining_dimes / 5) + 1): penny = remaining_dimes - nickel * 5 print(f"{quarter} quarters, {dime} dimes, {nickel} nickels, {penny} pennies")
修复后的效果
现在运行代码,你就能看到4 quarters, 0 dimes, 0 nickels, 0 pennies这个组合了,同时其他所有合法的零钱组合也都会被完整输出,不会再漏掉任何一种情况~
内容的提问来源于stack exchange,提问作者huy
相关产品推荐
相关产品推荐

