我正在尝试编写一个捕食者-猎物模型,在其中输入兔子,狐狸和年的数量。然后输出该年后的最终兔子和狐狸的数量。我能够退还一定数量的兔子和狐狸,但是我没有得到正确的值。一年后狐狸和兔子的算法是:
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))
答案 0 :(得分:5)
您的代码几乎正确,这是一个已修复的固定版本:
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__'
不应位于函数内部,而应像我一样位于模块范围内。