我正在尝试编写一个捕食者—猎物模型,在其中输入兔子,狐狸和年的数量。然后输出该年后的最终兔子和狐狸的数量。我能够退还一定数量的兔子和狐狸,但是我没有得到正确的值。狐狸和兔子一年后的算法为:


  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__'不应该位于函数内部,而应该位于模块范围内,就像我拥有的​​一样。

09-27 09:58