我正在尝试编写一个捕食者—猎物模型,在其中输入兔子,狐狸和年的数量。然后输出该年后的最终兔子和狐狸的数量。我能够退还一定数量的兔子和狐狸,但是我没有得到正确的值。狐狸和兔子一年后的算法为:
F1yr = F0yr –底限(F0yr *(G-S * R0yr))
R1yr = R0yr +底数(R0yr *(A-B * F0yr))
其中A = 0.04,B = 0.0005,G = 0.2和S = 0.00005
对于99年后初始输入5891只兔子和16只狐狸,它应该返回6484只兔子和144只狐狸,但是我得到了4682只兔子和189只狐狸。
这是我到目前为止的代码,我觉得我已经接近答案了,但还不完全是:
def bunnies(rabbits,foxes,years):
if __name__ == '__main__':
if years == 0:
tot = []
tot.append(rabbits)
tot.append(foxes)
return tot
else:
a = 0.04
b = 0.0005
g = 0.2
s = 0.00005
rabbits = rabbits + math.floor(rabbits * (a-b * foxes))
foxes = foxes - math.floor(foxes * (g-s * rabbits))
return bunnies(rabbits,foxes,years-1)
rabbits = int(input('Enter Initial Rabbit Population:\n'))
foxes = int(input('Enter Initial Fox Population:\n'))
years = int(input('Enter Number of Years to Simulate:\n'))
print(bunnies(rabbits,foxes,years))
最佳答案
您的代码几乎是正确的,这是一个已修复的固定版本:
import math
def bunnies(rabbits, foxes, years):
A = 0.04
B = 0.0005
G = 0.2
S = 0.00005
if years == 0:
return rabbits, foxes
else:
rabbits_last, foxes_last = rabbits, foxes
foxes = foxes_last - math.floor(foxes_last * (G - S * rabbits_last))
rabbits = rabbits_last + math.floor(rabbits_last * (A - B * foxes_last))
return bunnies(rabbits, foxes, years - 1)
if __name__ == '__main__':
rabbits = int(input('Enter Initial Rabbit Population: '))
foxes = int(input('Enter Initial Fox Population: '))
years = int(input('Enter Number of Years to Simulate: '))
print(bunnies(rabbits, foxes, years))
当您将已经改变的兔子种群的值用于新的狐狸种群计数时,就会出现此问题。
调用
print(bunnies(rab,fox,yrs))
时,您也使用了错误的变量名,但是我认为这只是一个复制错误,因为您没有收到错误消息。最后,您的
if __name__ == '__main__'
不应该位于函数内部,而应该位于模块范围内,就像我拥有的一样。