MIT OCW 6.0001 Pset1 Part B:半年度加薪代码逻辑错误排查
问题排查与修复
核心错误点
- 条件判断逻辑错误:原代码用
num_months / 6 == 0判断是否满6个月,这完全不成立——num_months从1开始递增,除以6的结果永远不可能为0。正确的判断应该是用取模运算num_months % 6 == 0,用来检查当前月份数是否是6的整数倍。 - 重复计算当月储蓄:原if块内再次执行了
current_savings += ...,这会导致加薪当月的储蓄被计算两次,既不符合逻辑,也会打乱储蓄增长节奏。
修正后的代码
annual_salary = float(input('Your starting annual salary : ')) semi_annual_raise = float(input('Your semi-annual salary raise (express in a decimal) : ')) total_cost = float(input('The cost of your dream home : ')) portion_saved = float(input('The portion of salary you want to be saved (express in a decimal) : ')) portion_down_payment = total_cost * 0.25 r = 0.04 monthly_salary = annual_salary / 12 num_months = 0 current_savings = 0 while current_savings <= portion_down_payment: # 每月固定计算储蓄:利息+当月工资存款 current_savings += current_savings * r / 12 + monthly_salary * portion_saved num_months += 1 # 每满6个月(第6、12、18...个月结束后)执行加薪 if num_months % 6 == 0: monthly_salary += monthly_salary * semi_annual_raise print('Number of months =', num_months)
验证结果
输入参数120000、0.03、500000、0.05时,运行修正后的代码会输出Number of months = 142,符合预期。
内容的提问来源于stack exchange,提问作者Kavy Singh
相关产品推荐
相关产品推荐

