簡體   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