两段相似for循环输出差异原因分析及兔群模拟问题排查
两段兔子种群模拟代码的输出差异分析
问题背景
已知兔子种群每日变化公式为:0.05*rabbit - 0.0002*fox*rabbit,狐狸数量固定为100,初始兔子数量1000,需计算10天后的兔子数量。以下两段代码输出不同,核心原因如下:
错误代码(code1)
day=10 fox=100 rabbit=1000 change_rabbit = 0.05 * rabbit -0.0002*fox*rabbit for i in range(day): rabbit+= change_rabbit print(int(rabbit))
问题核心:
- 只在循环开始前计算了一次
change_rabbit,这个值是基于初始兔子数量1000算出的固定值(计算得:0.051000 - 0.0002100*1000 = 50 - 20 = 30)。 - 后续循环中每天都给兔子数量加这个固定的30,相当于假设兔子每天的增长/变化量是恒定的,完全违背了题目中「每日变化量与当日兔子数量挂钩」的公式逻辑。
正确代码(code2)
day=10 fox=100 rabbit=1000 increase_rabbit=0.05 change_rabbit = increase_rabbit * rabbit -0.0002* fox *rabbit for i in range(day): rabbit+= increase_rabbit * rabbit -0.0002* fox *rabbit print(int(rabbit))
正确原因:
- 循环内部每次都会用当前的
rabbit值重新计算当日的变化量,完全符合题目给出的每日变化公式。比如第二天计算时,用的是第一天结束后的兔子数量,以此类推,每一步的变化都和当日种群数量匹配。
总结
code1错误地将变化量固定为初始值,没有随每日兔子数量更新;code2则严格遵循公式,每天重新计算变化量,因此两者输出结果不同。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

