- 本文是网课:Python语言程序设计国家精品——(北京理工大学 嵩天 、 黄天羽 、 礼欣)的学习笔记。
目录
5.1 函数的定义与使用
5.2 实例7:七段数码管绘制
5.3 代码复用与函数递归
5.4 模块4:PyInstaller库的使用
5.5 实例8:科赫雪花小包裹
函数定义时可以为某些参数指定默认值,构成可选参数,在参数列表中可选参数必须定义在非可选参数之后。
可变参数同样放在后面。
函数没有返回值时,也可以return,只是什么都不返回就是了。
return可以返回0或多个返回值。
列表类型[a,b,c...];元组类型(a,b,c...)
对比如下两个图:
关于组合数据类型,对比观察如下两图:
组合数据类型在Python中是由指针来实现的。
一种函数的紧凑表达形式。
注意lambda函数中的<表达式>不是<函数体>
对于lambda函数 f = lambda x , y : x + y 它的函数名就是f
import turtle
def drawLine(draw): #绘制单段数码管
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit): #根据数字绘制七段数码管
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9,] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup() #为绘制后续的数字确定位置
turtle.fd(20) #为绘制后续的数字确定位置
for i in range(10):
drawDigit(i)
import turtle
def drawLine(draw): #绘制单段数码管
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.right(90)
def drawDigit(digit): #根据数字绘制七段数码管
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9,] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup() #为绘制后续的数字确定位置
turtle.fd(20) #为绘制后续的数字确定位置
def drawDate(date): #将date字符串中的数字逐个打印
for i in date:
drawDigit(eval(i)) #通过eval()函数将数字变为整数
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20190223')
turtle.hideturtle()
turtle.done()
main()
绘制效果
import turtle,time
def drawGap(): #绘制数码管间隔
turtle.penup()
turtle.fd(5)
def drawLine(draw): #绘制单段数码管
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit): #根据一个数字绘制七段数码管
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9,] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date): #将date字符串中的数字逐个打印
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write('年',font=('Arial',18,"normal"))
turtle.pencolor("green")
turtle.fd(60)
elif i == '=':
turtle.write('月',font=('Arial',18,"normal"))
turtle.pencolor("blue")
turtle.fd(60)
elif i == '+':
turtle.write('日',font=('Arial',18,"normal"))
else:
drawDigit(eval(i))
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-350)
turtle.pensize(5)
#drawDate('2019-02=23+')
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
运行结果
递归:函数定义中调用函数自身的方式。
递归的实现:函数+分支语句
如果按视频中的方法在cmd中直接输入pip install pyinstaller显示pip' 不是内部或外部命令,也不是可运行的程序
或批处理文件。的话,可能是没有按默认安装Python路径导致的,应该可以修改环境变量PATH再操作。或者有如下简单方法,pip程序在你Python安装路径中的Scripts目录下,所以在cmd中我们只要切换一下目录就Ok了。比如我的pip在D:\Python372\Scripts下:
PyInstaller是命令行的执行程序,所以在命令行用、
上面PyInstaller的使用需要使cmd先进入你PyInstaller安装到的目录即:D:\Python372\Scripts,然后由于我的代码目录为:D:\Python372\PythonWorkPlace\SevenDigitsDrawV3.py,也就是说所以我需要:
具体实现:
图标关联时注意图标的目录即可。
#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,400)
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
turtle.pensize(2)
koch(600,3) # 3阶科赫曲线
turtle.hideturtle()
main()
科赫雪花就是三个科赫曲线做边组成的
#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(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()
视频中直接写文件名没有目录的调整是因为图标与程序放在与pyinstaller相同目录下。
- C:\Users\17125>D:
- D:\>cd Python372\Scripts
- D:\>cd Python372\Scripts>pyinstaller -i ..\PythonWorkPlace\snowflake.ico -F ..\PythonWorkPlace\KochDrawV2.py