Python找零程序问题:1欧元硬币无法正常显示
欧元找零程序1欧元部分修复方案
问题分析
当前程序里1欧元硬币无法正常显示的核心问题有两个:
- 判断条件逻辑错误:1欧元的输出判断用了
if (change % 2) >= 2,但change % 2的结果只能是0或1,永远不可能满足>=2的条件,导致该分支永远不会触发。 - 1欧元数量计算可优化:原代码用
change % 2计算1欧元数量,虽部分场景下正确,但依赖前面取余的连锁计算,不如直接用总找零减去已分配的面额总和更可靠。
修正后的代码
def main(): money1 = input("Purchase price: ") money2 = input("Paid amount of money: ") price = int(money1) paid = int(money2) change = paid - price ten_euro = change // 10 five_euro = (change - ten_euro * 10) // 5 two_euro = (change - ten_euro * 10 - five_euro * 5) // 2 one_euro = change - ten_euro * 10 - five_euro * 5 - two_euro * 2 if price < paid: print("Offer change:") if ten_euro > 0: print(ten_euro, "ten-euro notes") if five_euro > 0: print(five_euro, "five-euro notes") if two_euro > 0: print(two_euro, "two-euro coins") if one_euro > 0: print(one_euro, "one-euro coins") else: print("No change") if __name__ == "__main__": main()
修改说明
- 1欧元数量计算:改为用总找零依次减去10、5、2欧元的总金额,直接得到1欧元的数量,逻辑直观且不易出错。
- 输出判断条件:所有面额的输出判断都改为检查对应面额的数量是否大于0,替代原来基于剩余金额范围的判断,逻辑更严谨,避免出现判断条件与实际数量不匹配的情况。
- 5、2欧元计算优化:同样改为基于已分配的大额面额后剩余的金额计算,保持逻辑一致性。
测试验证
- 示例1输入:
输出:Purchase price: 12 Paid amount of money: 50Offer change: 3 ten-euro notes 1 five-euro notes 1 two-euro coins 1 one-euro coins - 示例2输入:
输出:Purchase price: 9 Paid amount of money: 20Offer change: 1 ten-euro notes 1 one-euro coins
内容的提问来源于stack exchange,提问作者Karina Viche Avila
相关产品推荐
相关产品推荐

