[英]Python: Loop not giving desired result
因此,我正在尝试编写代码来模拟捕食者和被捕食者的情况,该情况以低掠食者和高捕食者开始。 随着时间的推移,捕食者的数量会增加,而猎物的数量则会减少,直到猎物的数量变得不足以维持捕食者的数量。 捕食者的种群死亡,然后猎物种群能够重新繁殖。 每当两个种群中的一个种群达到0时,模拟都将停止,在这种情况下,捕食者种群将随着模拟的时间绘制两个种群,直到停止为止。 到目前为止,这是我的代码:
import matplotlib.pyplot as plt
def simulate(initialPred, initialPrey, preyGrowth, predationRate, predShrink, predFedBirthRate):
preyCounts = []
predatorCounts = []
predatorI = initialPred
preyI = initialPrey
predator = predatorI
prey = preyI
while predator > 0 and prey > 0:
predator = predatorI * (1 - predShrink + predFedBirthRate * preyI)
prey = preyI * (1 + preyGrowth - predationRate * predatorI)
predatorCounts.append(predator)
preyCounts.append(prey)
predatorI = predator
preyI = prey
plt.plot(predatorCounts, 'r', preyCounts, 'b')
plt.show()
return preyCounts, predatorCounts
simulate(50,1000,0.25,0.01,0.05,0.00002)
有人能帮助我吗?
*此外,每当我将绘图代码放在函数行后的函数行中,并且内部值像这样时,还可以:
simulate(50,1000,0.25,0.01,0.05,0.00002)
plt.plot(predatorCounts, 'r', preyCounts, 'b')
plt.show()
它没有绘制函数中的值,并说predatorCounts
和preyCounts
是未定义的。
因此,您查看了您的过程/计算,它看起来是正确的,但是您查看了结果,这很有趣。 当您打印计数时,您会注意到一件事...
print predatorI, preyI
在现实世界中,有一部分掠食者和猎物没有任何意义。 您正在尝试模拟现实世界。 您所有的费率参数都可能基于整体,而不是小数。 因此,您确定模拟中不能存在任何分数众生,并且仅在人口增长计算之后处理整个众生(整数)...
您的函数返回计数向量。 如果要将绘图语句移到函数之外,则需要将函数的返回值分配给一个名称,然后使用它们进行绘图。
prey, predator, = simulate(50,1000,0.25,0.01,0.05,0.00002)
plt.plot(predator, 'r', prey, 'b')
plt.show()
这是从文档中读取的有关名称,范围和名称空间https://docs.python.org/3/tutorial/classes.html#a-word-about-names-and-objects https:// docs的一些信息。 python.org/3/reference/executionmodel.html#naming-and-binding
您可能会在使用更多语言时需要定期阅读它们。
如果我与起始群体和使用初始化绘图数据int()
截断的人群中,我给你说,你应该看到的情节:
import matplotlib.pyplot as plt
def simulate(initialPred, initialPrey, preyGrowth, predationRate, predShrink, predFedBirthRate):
preyCounts = [initialPrey]
predatorCounts = [initialPred]
predator = initialPred
prey = initialPrey
while predator > 0 and prey > 0:
predatorScaleFactor = 1.0 - predShrink + predFedBirthRate * prey
preyScaleFactor = 1.0 + preyGrowth - predationRate * predator
predator = int(predator * predatorScaleFactor)
prey = int(prey * preyScaleFactor)
predatorCounts.append(predator)
preyCounts.append(prey)
plt.plot(predatorCounts, 'r', preyCounts, 'b')
plt.show()
return preyCounts, predatorCounts
simulate(50, 1000, 0.25, 0.01, 0.05, 0.00002)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.