2020年2月14日星期六
代码复用与函数递归
代码复用可以理解为将代码当成资源进行抽象
—代码资源化:程序代码是一种用来表达计算的“资源”
—代码抽象化:使用函数等方法对代码赋予更高级别的定义
—代码复用:同一份代码在需要时可以被重复使用
—紧耦合:两个部分之间交流很多,无法独立存在
—松耦合:两个部分之间交流很少,可以独立存在
我们追求在模块内部让它尽可能的是紧耦合,在模块之间要尽可能减少它们の 传递参数和返回值
递归是指函数定义中调用自身的方式
递归中两个关键特征值
—链条:计算过程中存在递归链条
—基例:存在一个或多个不需要再次递归的基例
递归的实现
—递归本身是一个函数,需要函数定义方式描述
—函数内部,采用分支语句对输入参数进行判断
—基例和链条,分别编写对应代码
递归实例
1、字符串反转
如果字符串为空返回本身,否则将字符串的首字符放在其余字符的最后,递归调用剩余字符串,直至剩余字符串为空。
2、斐波那契数列
当n为1或2时,函数值为1,返回1,否则返回n-1与n-2的函数值的和。
3、汉诺塔
首先定义hanoi函数,四个参数分别为:圆盘数量,源柱子,目标柱子,过渡柱子 。假设A为有n个圆盘的柱子,C为移动的目标柱子,B为圆盘从A移到C的中间柱子,如图。
(基例)如果圆盘数量为1,用print函数输出当前圆盘的尺寸,从哪一个源柱子到哪一个源柱子,用全局变量count来计数步骤。
除了基例之外,调用两次hanio函数,让n-1个圆盘由A搬到B(第一次调用hanio函数),将第n个圆盘由A搬到C,再让n-1个圆盘从B搬到C(第二次调用hanio函数),来看一个简单的例子,让圆盘数量为3:
前三步实现将A柱上的1和2号圆盘搬到B柱上,第四步直接将A柱上的3号圆盘搬到C柱上,后三步将B柱上的1和2号圆盘搬到C柱上,总体上实现将1、2、3号圆盘从A柱搬到C柱的过程
pyinstaller库
pyinstall库的功能是将我们编写的扩展名为.py源文件转换成无需源代码的可执行文件,Pyinstaller库是第三方库,使用前需要额外安装,需要使用pip工具,这里我们使用window平台下的cmd命令行,在命令行输入 pip install pyinstall,看到如下结果即为安装成功注:pyinstaller命令只能在cmd命令行使用而不能在IDLE交互编程环境下使用因为pyinstall是命令行的执行程序,不是Python下面的执行指令
在cmd命令行我们使用 pyinstaller -F SevenDightsDarwV2.py(要转换的文件名)
执行这段代码之后我们打开目录,会看到目录中生成了额外的三个目录_pycache_,build,dist,前两个可以安全的删除掉,最后一个目录中可以看到一个与源文件重名的.exe文件,这个文件就是打包之后生成的文件,我们可以双击这个文件去执行我们需要完成的程序功能
pyinstaller库常用参数
这里推荐使用-F参数,下面我们举一个实例,我们可以使用pyinstalle对一个源代码文件关联一个图标,并且进行打包,这里需要一个.ico图标文件,在命令行输入如下语句即可得到下图结果
科赫雪花小包裹
科赫曲线是一种用于分形的曲线实例一:绘制科赫曲线
代码一:
#KochDrawV1.py
import turtle
def koch(size,n):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main():
turtle.setup(800,800)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
turtle.pensize(2)
koch(600,3)
turtle.hideturtle()
main()
结果一:
实例二:绘制科赫雪花
代码二:
#KochDrawV2.py
import turtle
def koch(size,n):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
koch(size/3,n-1)
def main():
level=eval(input("请输入科赫雪花阶数:"))
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
turtle.hideturtle()
turtle.done()
main()
结果二:
我们可以通过pyinstaller库将源文件打包成可执行文件发给朋友(过程参考上一篇pyinstaller库部分内容)