文章目录
代码复用和函数递归
代码复用
模块化设计
函数递归的理解
函数递归的调用过程
递归实例
PyInstaller库基本介绍
递归的魅力
代码复用和函数递归
代码复用
把代码当成资源进行抽象
代码资源化:程序代码是一种用来表达计算的"资源"
代码抽象化:使用函数等方法对代码赋予更高级别的定义
代码复用:同一份代码在需要时可以被重复使用
函数 和 对象 是代码复用的两种主要形式
函数:实现一个问题的解决,给代码一个名字,在代码的层面上进行初级抽象
对象:属性 和 方法,<a>.<b> 和 <a>.<b>(),在函数之上再次进行抽象
模块化设计
分而治之
通过函数或对象封装将程序划分为模块及模块间的表达
具体包括:主程序、子程序和子程序间关系
分而治之:分而治之、分层抽象、体系化的设计思想
紧耦合 松耦合
紧耦合:两个部分之间交流很多,无法独立存在。
松耦合:两个部分之间交流较少,可以独立存在。
模块内部紧耦合、模块之间松耦合。
函数递归的理解
函数定义中调用函数自身的方式(自己调用自己)
两个重要特征:
链条:计算过程存在递归链条
基例:存在一个或多个不需要再次递归的基例
所谓链条就是反复调用自己,但不可以是没有尽头的,存在递归头递归尾,没有尽头也就是所谓基例,二者缺一不可。
数学归纳法
证明当n取第一个值n0时命题成立
假设当nk时命题成立,证明当n=nk+1时命题也成立
递归是数学归纳法思维的编程体现
函数递归的调用过程
n的阶乘用Python递归代码完成
def fact(n): if n == 0 : return 1 else : return n*fact(n-1)
递归的基本实现需要 函数 + 分支语句
递归本身是一个函数,需要函数定义方式描述
函数内部,采用分支语句对输入参数进行判断
基例和链条,分别编写对应代码
调用过程:
递归实例
字符串反转
其实之前就学过字符串的切片操作,就可以完成字符串的反转。s[::-1]它表示这个字符串从前到后参数-1让它反转。接下来我们用递归试着实现。
def fz(s): if s=="": return s else: return fz(s[1:])+s[0]
通过定义函数使得它可以调用自己,然后通过分支,如果字符串是空,那么返回空,否则我们将字符串进行切片,除去第一个字符其他全部反转,然后将第一个字符放在反转好的字符后面,实现整体的反转。
斐波那契数列
def f(n): if n==1 or n==2: return 1 else: return f(n-1) +f(n-2)
这个很简单,直接通过定义写出来就好了
领会:递归是一种思维,而我们将这种思维交给计算机完成时,我们只需要将问题拆分成 n 和 n-1 的阶乘的问题,至于这些计算机如何实现,我们不去关心。
递归其实很简单,就是自己调用自己,使用递归可以用很少量的代码实现一些很棘手麻烦的问题。
A:从前有个庙,庙里有个老和尚,老和尚在讲故事
A:在讲什么故事?
A:从前有个庙,庙里有个老和尚,老和尚在讲故事
A:在讲什么故事?
A:……
PyInstaller库基本介绍
将.py源代码转换成无需源代码的可执行文件
(01文件,好处跨平台,无需环境一样执行)
PyInstaller库是第三方库
官方网站:http://www.pyinstaller.org
第三方库:使用前需要额外安装
安装第三方库需要使用pip工具
(cmd命令行) pip install pyinstaller
等它跑完
看到这个说明🆗了,下面还有路径。好,欧克,说说怎么生成可执行文件
我们打开写好的代码的文件夹
进来
这里输入cmd,注意空格,进入我们当前目录的命令行窗口
输入 pyinstaller -F 文件名
我这个文件名是 七段数码管.py
然后回车,稍等……
然后我们看到building EXE successfully,说明已经生成了EXE文件。
返回文件,我们可以看到多出来了很多文件
我们打开dist文件夹,就可以看到打包好的exe文件了。
这相当于01010二进制代码,可跨平台,不需要Python环境,nice
这是库的一些常用命令
递归的魅力
目的:
理解递归,感受递归的魅力
实现效果:
科赫雪花绘制
递归思想:函数+分支
递归链条:线段的组合
递归基例:初始线段
这个就相当于一条直线,平分3份,去掉中间的一份,画一个60°的三角,之后被划分成了四条线,四条都做上一步的3等分话三角,于是我们先用函数完成这个然后用递归,自己调用自己
首先,引入turtle库,递归写函数,给两个参数size长度,n来表示阶数
import turtle as t def k(size, n): if n == 0: t.fd(size) else: for angle in [0, 60, -120, 60]: t.left(angle) k(size/3, n-1)
下面定义主函数
def main(): t.setup(600,600) t.penup() t.goto(-210, 130) t.pendown() t.pensize(1) n = 3 k(400, n) t.hideturtle() input() main()
input()使画完不会退出程序,好好欣赏
但是我们发现结果好像没有那个效果,想要实现雪花的效果,❄,也很简单,只要让海龟旋转3次,实现180°等边三角即可实现
完整代码:
import turtle as t def k(size, n): if n == 0: t.fd(size) else: for angle in [0, 60, -120, 60]: t.left(angle) k(size/3, n-1) def main(): t.setup(600,600) t.penup() t.goto(-210, 130) t.pendown() t.pensize(1) n = 3 k(400, n) t.right(120) k(400, n) t.right(120) k(400, n) t.hideturtle() input() main()
最后给我们的代码打包,可以发给小伙伴。哈哈哈
图标这里要用 .ico格式的文件,可以在网上找一个转一下格式就🆗了
输入以下命令
打包完成
Perfect