如何在Python罚款计算器中添加受害者附加费计算功能?
解决方案
核心思路是拆分逻辑:先计算基础超速罚款,再根据基础罚款金额计算受害者附加费,最后合并得到总罚款。具体步骤如下:
- 新增附加费计算函数:单独封装受害者附加费的规则,让逻辑更清晰,也方便后续维护。
- 修改基础罚款计算逻辑:让原函数先算出基础罚款金额,而非直接打印结果。
- 合并总金额并输出:调用附加费函数得到金额后,与基础罚款相加,最终输出明细和总额。
完整修改后的代码
def ask_limit(): limit = float(input("What was the speed limit? ")) return limit def ask_speed(): speed = float(input("What was your clocked speed? ")) return speed def calculate_victim_surcharge(base_fine): """根据基础罚款金额计算受害者附加费""" if 0 <= base_fine <= 99: return 40 elif 100 <= base_fine <= 200: return 50 elif 201 <= base_fine <= 350: return 60 elif 351 <= base_fine <= 500: return 80 elif base_fine > 500: return base_fine * 0.4 return 0 def findfine(speed, limit): if speed > 35 + limit : base_fine = ((speed - limit) * 8 + 170) elif speed > 30 + limit : base_fine = ((speed - limit) * 4 + 100) elif speed > limit : base_fine = ((speed - limit) * 2 + 100) elif speed <= limit: print("No fine, vehicle did not exceed allowed speed limit.") return surcharge = calculate_victim_surcharge(base_fine) total_fine = base_fine + surcharge # 格式化输出,保留两位小数更符合金额展示习惯 print(f"基础罚款金额: ${base_fine:.2f}") print(f"受害者附加费: ${surcharge:.2f}") print(f"总罚款金额: ${total_fine:.2f}") def main(): limit = ask_limit() speed = ask_speed() findfine(speed, limit) main()
关键说明
- 函数职责拆分:
calculate_victim_surcharge只负责处理附加费规则,findfine专注于基础罚款计算,代码逻辑更易读和维护。 - 金额格式化:用
.2f格式化输出,保证金额显示为两位小数,符合实际场景需求。 - 边界处理:覆盖了所有罚款区间,包括无罚款的情况,避免出现异常。
内容的提问来源于stack exchange,提问作者KauaiGuy
相关产品推荐
相关产品推荐

