Python程序模拟手工推算考虑兔子寿命的斐波那契数列

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 18:54   2102   0

开学第一课:拜托,一定不要这样问Python问题

中国大学MOOC“Python程序设计基础”免费学习地址

推荐图书:

《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科课程“Python应用开发”配套教材,清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书)

京东购买链接:https://item.jd.com/12668739.html

天猫、当当均有销售,可以选择自己常用平台搜索“董付国 第3版”找到本书。

配套资源:教学大纲、电子教案、微课视频、PPT课件、例题源码、习题答案、考试系统。

适用专业:计算机、网络工程、软件工程以及相关专业。

适用学时:>=64

页数:381

定价:59.8

教学大纲:《Python程序设计(第3版)》配套教学大纲

习题答案:《Python程序设计(第3版)》课后习题答案

目录(二级)

第1章 基础知识/1

1.1 如何选择Python版本

1.2 Python安装与简单使用

1.3 使用pip管理扩展库

1.4 Python基础知识

1.5 Python代码编写规范

1.6 Python文件名

1.7 Python程序的__name__属性

1.8 编写自己的包

1.9 Python快速入门

1.10 The Zen of Python

第2章 Python数据结构/31

2.1 列表

2.2 元组

2.3 字典

2.4 集合

2.5 其他数据结构

第3章 选择与循环/67

3.1 运算符与条件表达式

3.2 选择结构

3.3 循环结构

3.4 break和continue语句

3.5 综合运用

第4章 字符串与正则表达式/83

4.1 字符串

4.2 正则表达式

第5章 函数设计与使用/115

5.1 函数定义

5.2 形参与实参

5.3 参数类型

5.4 return语句

5.5 变量作用域

5.6 lambda表达式

5.7 案例精选

5.8 高级话题

第6章 面向对象程序设计/138

6.1 类的定义与使用

6.2 类的方法

6.3 属性

6.4 特殊方法与运算符重载

6.5 继承机制

第7章 文件操作/158

7.1 文件基本操作

7.2 文本文件基本操作

7.3 二进制文件操作

7.4 文件级操作

7.5 目录操作

7.6 案例精选

第8章 异常处理结构与程序调试/181

8.1 基本概念

8.2 Python异常类与自定义异常

8.3 Python中的异常处理结构

8.4 断言与上下文管理

8.5 使用IDLE调试代码

8.6 使用pdb模块调试程序

第9章 GUI编程/199

9.1 tkinter基础

9.2 tkinter精彩编程

第10章 网络程序设计/230

10.1 计算机网络基础知识

10.2 UDP和TCP编程

10.3 Socket编程案例精选

10.4 网页内容读取与网页爬虫

第11章 安卓平台的Python编程/248

11.1 QPython简介

11.2 安卓应用开发案例

第12章 Windows系统编程/254

12.1 注册表编程

12.2 创建可执行文件

12.3 调用外部程序

12.4 创建窗口

12.5 判断操作系统版本

12.6 系统运维

第13章 多线程与多进程编程/273

13.1 threading模块

13.2 Thread对象

13.3 线程同步技术

13.4 多进程编程

第14章 数据库编程/294

14.1 SQLite应用

14.2 访问其他类型数据库

第15章 多媒体编程/306

15.1 图形编程

15.2 图像编程

15.3 音乐编程

15.4 语音识别

15.5 视频处理和摄像头接口调用

第16章 逆向工程与软件分析/328

16.1 主流项目与插件简介

16.2 IDAPython与Immunity Debugger编程

16.3 Windows平台软件调试原理

16.4 案例精选

第17章 科学计算与可视化/349

17.1 numpy简单应用

17.2 scipy简单应用

17.3 matplotlib简单应用

17.4 数据分析模块pandas

17.5 统计分析模块statistics

第18章 密码学编程/377

18.1 安全哈希算法

18.2 对称密钥密码算法DES和AES

18.3 非对称密钥密码算法RSA与数字签名算法DSA

=======================

斐波那契数列是生物、数学和计算机领域(可能还包括计划生育办公室)人士都比较熟悉的一个问题:小明买回来一对兔子,从第3个月开始就每个月生一对兔子,生的每一对兔子长到第3个月也开始每个月都生一对兔子,每一对兔子都是这样从第3个月开始每个月生一对兔子,那么每个月小明家的兔子数量(对)构成一个数列,这就是著名的斐波那契数列。

公众号“Python小屋”曾经推送过关于这个数列的系列文章,详见:

  1. 尾递归优化原理与Python实现(以Fibonacci数列和小明爬楼梯问题为例)

  2. 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)

  3. Fibonacci数列第n项的第7种计算方法:Python列表

  4. 三种Fibonacci数列第n项计算方法及其优劣分析

  5. Python快速计算Fibonacci数列中第n项的方法

现在的问题是,如果假设每一对兔子的寿命都是72个月,并且只要活着就坚持每个月生一对小兔子。那么任意第n个月的兔子总数是多少呢?

这是上周在Python小屋刷题神器(详见:Python小屋刷题神器最近升级的新功能介绍)中录入的一个新题目,题目发布之后余姚二中梁见斌老师指出这个题目的参考答案是错的,并给出了正确的计算方法,后来我在Python技术交流教师微信群里提出上述问题,国防科大刘万伟中国传媒大学胡凤国两位老师从不同角度推导了通项公式并进行了数学证明,山东工商学院厉玉蓉老师也在线下提供了非常好的推算方法和正确的通项公式:

当n=1或n=2时,f(n)=1

当n<72时,f(n)=f(n-1)+f(n-2)

当n=73时,f(n)=f(n-1)+f(n-2)-2

当n>73时,f(n)=f(n-1)+f(n-2)-f(n-72)

具体的数学推导和讨论过程不再赘述,为了从数值上验证通项公式的正确性,我编写了两个程序,通过不同的推算方式来模拟手工推算过程,这是本文的重点。

第一个程序的思路是,每行的数字表示这个月新出生的兔子数量,行的长度表示这些新生兔子存活的月数,这样的话每列数字之和就是这个月的兔子数量(单位:对),如下图所示:

生成上图Excel中数据的程序如下,可以通过调整参数来设置兔子存活的月数。

第二个程序的思路是,以下图为例,每往下一行往右一列表示兔子长大一个月,行数与兔子寿命月数一样多,第n列的数字之和即为该月兔子总数(单位:对)

生成上面Excel文件的Python程序如下,可以通过调整main()函数的参数任意设置兔子从第几个月开始生兔子以及兔子的寿命。

上面的两个程序都是把生成的数据存放到Excel文件中,当数值超过一定大小之后,会进行四舍五入。大家可以按照上面的思路自行改写为使用Python列表保存数据。

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(累计印刷超过120次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”或“培训”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过500节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习1318道客观题和210道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP