如何精简这段里亚尔金额计算代码并实现自动化优化?
精简后的里亚尔纸币数量计算代码
首先,优化后的规范代码如下:
# 获取输入金额,用int替代eval更安全 amount = int(input("Enter the amount of money: ")) # 定义里亚尔面额(从大到小排序) denominations = [500, 200, 100, 50, 20, 10, 5, 2, 1] counts = [] # 循环计算每个面额的数量 for value in denominations: count = amount // value counts.append(count) amount = amount % value # 格式化输出结果 print("You have") for value, count in zip(denominations, counts): print(f"\t{value} riyal: {count}")
优化说明
- 替换不安全的eval:原代码使用
eval(input(...))存在安全风险(若用户输入恶意代码会被执行),改用int()直接转换输入为整数,更安全且匹配金额输入场景。 - 消除重复逻辑:将所有面额存入列表,通过一次循环完成所有面额的数量计算,避免重复编写
//和%操作,减少冗余代码的同时,后续添加/修改面额也更便捷。 - 统一输出格式:用
zip()配对面额和数量,循环打印输出,替代原代码中零散的多行f-string拼接,格式更整洁易维护。 - 提升可读性:使用通用变量名(如
denominations、counts)替代单个面额变量,代码逻辑更清晰,符合专业规范。
如果需要更紧凑的写法,可借助divmod()函数同时返回商和余数,一步完成计算:
amount = int(input("Enter the amount of money: ")) denominations = [500, 200, 100, 50, 20, 10, 5, 2, 1] result = {} for val in denominations: result[val], amount = divmod(amount, val) print("You have") for val, cnt in result.items(): print(f"\t{val} riyal: {cnt}")
内容的提问来源于stack exchange,提问作者Wolly D
相关产品推荐
相关产品推荐

