繁体   English   中英

Python:循环未得到期望的结果

[英]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() 

它没有绘制函数中的值,并说predatorCountspreyCounts是未定义的。

因此,您查看了您的过程/计算,它看起来是正确的,但是您查看了结果,这很有趣。 当您打印计数时,您会注意到一件事...

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM