题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

兔子的规律为数列1,1,2,3,5,8,13,21...可以发现当前的数=上个数+上上个数

'''------------------------------------------------------
【程序设计】
---------------------------------------------------------

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生
      一对兔子,小兔子长到第三个月后每个月又生一对兔子,
      假如兔子都不死,问每个月的兔子总数为多少?

说明:rabbit()函数的功能是根据输入的月数返回兔子对数

---------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main和其它函数中的
      任何内容,仅在函数的注释标志之间填入所编写的若干语句。
------------------------------------------------------'''


def rabbit(num):
    # **********Program**********
    a=0
    b=1
    for i in range(num-1):
        a,b=b,a+b
    return b 
    # **********  End  **********


def main():
    print("【请连续三次计算某个月的兔子总数:】")
    for i in range(3):
        print("【第%d次:】" % (i+1))
        n = int(input("【查看第几个月的兔子对数:】"))
        rabbit_sum = rabbit(n)
        print("【第%d个月的兔子对数为】%d" % (n, rabbit_sum))


if __name__ == '__main__':
    main()

代码中现在的数b=上个数b+上上个数a。循环中在计算b的值的同时(不是先后顺序,而是同时进行的)将上个数b赋值给上上个数a。这样做是为了能正确计算出下一次循环中b的值。

如果从自然语言中理解,而不是用程序的思维:可以这样理解a,b=b,a+b: 将第1个数设为a,接着的一个数设为b,那么第3个数就是a+b,将第3个数设为b,将第2个数设为a(之前它是b),那么第4个数就是a+b,以此类推下去。


参考:
用python写#古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, # 小兔子长到第三个月后每个月又生一对兔子, # 假如兔子都不死,问每个月的兔子总数为多少? - geloushangdemao的博客 - CSDN博客