Python代码打印结果不一致,咨询第16行与第17行的逻辑差异
代码差异解析
核心差异来自investment_return变量的计算时机和是否动态更新,具体区别如下:
- 动态计算 vs 固定常量
第16行每次循环都会用当前最新的current_savings值实时计算当月投资收益,收益额会随着存款总额增长同步上涨,符合复利计算逻辑。
而你定义的investment_return变量是在while循环外部、current_savings初始值为0的时候计算的,计算结果固定为0 * 0.04 / 12 = 0,且整个循环过程中没有更新这个变量的值,所以第17行每次累加的投资收益都是固定的0,完全没有计入实际的理财收益。 - 逻辑正确性差异
第16行是符合业务逻辑的正确写法:每月理财收益按照当月月初的存款总额计息,利滚利计算。第17行相当于完全忽略了投资收益,只累加每月固定存款,最终计算出来的存够首付的月数会远大于正确结果。
如果你想保留investment_return变量的写法,只需要把变量更新逻辑挪到循环内部即可,修改后和第16行逻辑完全等价:
while current_savings < portion_down_payment: # 每次循环先计算当月的投资收益 investment_return = current_savings * r / 12 current_savings += investment_return + (portion_saved*monthly_salary) months_to_save += 1
内容的提问来源于stack exchange,提问作者Sir Gal
相关产品推荐
相关产品推荐

