Python实现Exact Change精确找零代码输入45无输出问题求解
错误原因分析
- 缩进不符合Python语法规范:所有if判断下的执行代码都没有正确缩进,会直接触发语法错误
- 逻辑分支结构错误:将Quarters、Dimes等硬币的判断用elif挂载到Dollars的判断分支下,只要总金额小于100(比如你输入的45),就不会进入任何后续硬币的判断逻辑,自然没有输出
- 变量作用域问题:
dollar_change仅在总金额≥100时才会定义,总金额小于100时调用该变量会直接触发NameError - 类型拼接错误:直接将int类型的硬币数量和字符串相加,会触发TypeError,需要先将数值转为字符串,或者使用格式化字符串输出
- 缺少剩余金额的全局传递:每种硬币计算完成后要把剩余金额继续传递给下一类硬币计算,不能仅在当前分支内处理
修正后代码
total_change = int(input()) remaining = total_change if remaining <= 0: print('No change') else: # 计算美元 dollar_cnt = remaining // 100 remaining = remaining % 100 if dollar_cnt == 1: print(f"{dollar_cnt} Dollar") elif dollar_cnt > 1: print(f"{dollar_cnt} Dollars") # 计算25美分 quarter_cnt = remaining // 25 remaining = remaining % 25 if quarter_cnt == 1: print(f"{quarter_cnt} Quarter") elif quarter_cnt > 1: print(f"{quarter_cnt} Quarters") # 计算10美分 dime_cnt = remaining // 10 remaining = remaining % 10 if dime_cnt == 1: print(f"{dime_cnt} Dime") elif dime_cnt > 1: print(f"{dime_cnt} Dimes") # 计算5美分 nickel_cnt = remaining // 5 remaining = remaining % 5 if nickel_cnt == 1: print(f"{nickel_cnt} Nickel") elif nickel_cnt > 1: print(f"{nickel_cnt} Nickels") # 计算1美分 penny_cnt = remaining if penny_cnt == 1: print(f"{penny_cnt} Penny") elif penny_cnt > 1: print(f"{penny_cnt} Pennies")
效果验证
输入45时的输出为:
1 Quarter 2 Dimes
完全符合最少硬币找零的要求,单复数也对应正确。
内容的提问来源于stack exchange,提问作者Gman12
相关产品推荐
相关产品推荐

