Python入门实例验证及结果之实例9 科赫雪花小包裹 ## 代码复用与函数递归 ## pyinstaller库 ##汉诺塔问题

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库部分内容)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值