PyInstaller库的使用及Koch曲线及推广,绘制康托尔集
PyInstaller库概述
将.py源代码转换成无需源代码的可执行文件
意思就是将.py文件转换为.exe文件
PyInstaller库是第三方库
- 官方网站:http://www.pyinstaller.org
- 第三方库:使用前需要额外安装
- 安装第三方库需要使用pip工具
PyInstaller库的安装
(cmd命令行) pip install pyinstaller
PyInstaller库的说明
pyinstaller库安装之后,它会安装生成一个文件,也是一个命令叫做PyInstaller,通过这样一个命令将一个源文件打包生成一个可执行文件
它会生成三个目录, __pycache__和build可以安全删除掉,而我们想要的可执行文件就在dist文件夹中
PyInstaller库常用参数
科赫雪花小包裹
科赫曲线,也叫雪花曲线;科赫曲线是一种用于分形的曲线
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(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3 # 3阶科赫雪花,阶数
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle()
main()
这段代码是用Python中的turtle库实现了科赫雪花的绘制。主要思路是采用递归的方式来绘制雪花的每一个分支,直到达到指定的阶数。
首先定义了一个koch函数,它的参数包括size和n,分别表示每个分支的长度和绘制的阶数。如果当前阶数为0,就直接绘制一条直线,否则就递归地绘制当前分支的三个子分支。
在绘制子分支的过程中,每次都要先左转或右转60度,然后继续递归绘制子分支。递归结束后,再左转或右转120度,继续递归绘制下一个子分支,直到绘制完整个雪花。
然后在main函数中,先进行一些初始化的操作,包括设置窗口大小、将画笔移动到指定的起点、设置画笔粗细等。接着设置阶数为3,然后分别绘制三个顶点处的雪花分支,最后隐藏画笔,完成绘制。
总之,这段代码实现科赫雪花的主要思路是使用递归,将雪花的每一个分支分解为三个子分支,然后依次绘制这些子分支,最终完成整个雪花的绘制。
举一反三
我们使用康托尔集做一个类似效果
康托尔集是一种无限长的、自相似的分形集合。类似于科赫雪花,我们可以使用递归的方式来绘制康托尔集。
#!/usr/bin/env python
# -- coding: utf-8 --
# @Time : 2023/3/25 16:35
# @File : 康托尔集.py
import turtle
def cantor(length, depth):
if depth == 0:
turtle.fd(length)
else:
turtle.down()
cantor(length/3, depth-1)
turtle.up()
turtle.fd(length/3)
turtle.down()
cantor(length/3, depth-1)
turtle.up()
turtle.fd(length/3)
turtle.down()
cantor(length/3, depth-1)
turtle.up()
def main():
turtle.setup(800, 400)
turtle.speed(0)
turtle.penup()
turtle.goto(-350, 0)
turtle.pendown()
turtle.pensize(2)
cantor(700, 5)
turtle.hideturtle()
turtle.done()
main()
在上述代码中,我们定义了一个cantor函数,它的参数包括length和depth,分别表示当前分支的长度和绘制的深度。
如果当前深度为0,就直接绘制一条长度为length的直线;否则就递归地绘制三个子分支,分别为长度为length/3的cantor(length/3, depth-1)。
在绘制子分支的过程中,我们首先将画笔降下,然后递归地绘制子分支。递归结束后,我们将画笔抬起,向前移动length/3的距离,再将画笔降下,继续绘制下一个子分支。
最后,在main函数中,我们先进行一些初始化的操作,包括设置窗口大小、将画笔移动到指定的起点、设置画笔粗细等。接着设置深度为5,然后绘制一条长度为700的康托尔集,最后隐藏画笔,完成绘制。
运行上述代码,我们可以看到一个康托尔集的图形,它由一系列越来越短的线段组成,非常具有美感。