[英]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.