两个非常相似的 for 循环具有不同输出

two very similar for loops with different ouputs

提问人:Anna 提问时间:6/21/2023 更新时间:6/21/2023 访问量:77

问:

我必须解决一个种群问题(动物):

如果存在狐狸,兔子种群(猎物)的每日变化将 BE:0.05 兔子-0.0002狐狸*兔子。模拟假设的情况,即 狐狸种群不会改变,始终为 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))`

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))`
Python for 循环 变量 范围

评论

1赞 slothrop 6/21/2023
在第一个代码中,始终基于原始的 1000 只兔子进行计算。在第二个代码中,根据最新的兔子数量进行计算。第二个是正确的。change_rabbitrabbit += ...
1赞 JNevill 6/21/2023
在第一个中,仅在您开始迭代之前计算一次,因此它始终考虑人口为 1000,即使它每天都在减少。第二个版本使用上一次迭代(天)的人口正确计算该公式。change_rabbitrabbitrabbit
1赞 Mark Tolonen 6/21/2023
只需将计算直接放在 for 循环中,这样每次都会使用新值重新计算,例如 并删除该行。change_rabbitrabbitrabbit += 0.05 * rabbit - 0.0002 * fox * rabbitchange_rabbit

答:

1赞 UnquoteQuote 6/21/2023 #1

在第一个代码中,在进入循环之前进行计算。 在排队中change_rabbit

change_rabbit = increase_rabbit * rabbit -0.0002* fox *rabbit

将值赋给内存中的变量。 然后,每次在循环中调用时,变量都会增加存储在内存中的变量值,即 。4999999change_rabbitrabbit+= change_rabbitrabbitchange_rabbit4999999

第二个代码是您要执行的操作:根据上一次迭代中的值计算新值。您不能直接使用,因为它已经计算出来,并且不会考虑变量的变化。如果你想避免代码重复,你可以为 定义一个函数,以当前的兔子数量作为参数。rabbitrabbitchange_rabbitrabbitchange_rabbit