目录
-
函数的定义和使用
-
函数的理解和定义
-
函数是一段代码的表示
-
作用
- 降低编程难度
- 代码复用
-
定义
- 函数定义时所指定的参数是一种占位符
- 函数定义如果不调用,不会被执行
-
-
函数的使用及调用过程
-
调用是运行函数代码的方式
- 给出实际参数
- 实际参数替换定义中的参数
- 函数调用后会得到返回值
-
-
函数的参数传递
-
参数个数
- 都行
- 可选参数放在必选参数后面
-
可变参数传递
- 可变参数*b
-
参数按照位置或名称传递
-
-
函数的返回值
-
函数可以返回0个或多个结果
-
-
局部变量和全局变量
-
局部变量和全局变量不是相同的
-
局部变量为组和数据类型且未创建,等同于全局变量
-
使用规则
- 基本数据类型,无论是否重名,局部变量与全局变量不同
- 可以通过global保留字在函数内部声明全局变量
- 组和数据类型,如果局部变量未真实创建,则是全局变量
-
-
lambda函数
-
lambda函数返回函数名作为结果
- 是匿名函数,即没有名字的函数
- 函数名是返回结果
- 用于定义简单的,能够在一行内表示的函数
-
结构
-
-
-
实例7:七段数码管绘制
-
基本思路
- 步骤1:绘制单个数字对应的数码管
- 步骤2:获得一串数字,绘制对应的数码管
- 步骤3:获得当前系统时间,绘制对应的数码管
- '
-
代码
-
import turtle,time def drawGap(): turtle.penup() turtle.fd(5) def drawLine(draw): drawGap() if draw : turtle.pendown() else: turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def drawDight(dight): if dight in [2,3,4,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,1,3,4,5,6,7,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,3,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,6,8]: drawLine(True) else: drawLine(False) turtle.left(90) if dight in [0,4,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,3,5,6,7,8,9]: drawLine(True) else: drawLine(False) if dight in [0,1,2,3,4,7,8,9]: drawLine(True) else: drawLine(False) turtle.left(180) turtle.penup() turtle.fd(20) def drawDate(date): turtle.pencolor("red") for i in date: if i == '-': turtle.write("年",font=("Arial",18,"normal")) turtle.pencolor("green") turtle.fd(40) elif i == '=': turtle.write("月",font=("Arial",18,"normal")) turtle.pencolor("blue") turtle.fd(40) elif i == '+': turtle.write("日",font=("Arial",18,"normal")) else: drawDight(eval(i)) def main(): turtle.setup(800,350,200,200) turtle.penup() turtle.fd(-300) turtle.pensize(5) drawDate(time.strftime("%Y-%m=%d+",time.gmtime())) turtle.hideturtle() turtle.done() main()
-
-
理解方法思维
- 模块化思维
- 规则化思维
- 化繁为简
-
扩展
- 绘制带小数点的七段数码管
- 带刷新的数字倒计时效果
-
import turtle def drawGap():#每根管前空5格 turtle.penup() turtle.fd(5) def drawLine(draw):#画管 drawGap() if draw : turtle.pendown() else: turtle.penup() turtle.fd(40) drawGap() turtle.right(90) def number(x): for i in range(x,-1,-1): drawDight(i) turtle.clear() turtle.goto(0,0) def drawDight(dight):#显示数字 if dight in [2,3,4,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,1,3,4,5,6,7,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,3,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,6,8]: drawLine(True) else: drawLine(False) turtle.left(90) if dight in [0,4,5,6,8,9]: drawLine(True) else: drawLine(False) if dight in [0,2,3,5,6,7,8,9]: drawLine(True) else: drawLine(False) if dight in [0,1,2,3,4,7,8,9]: drawLine(True) else: drawLine(False) turtle.left(180) turtle.penup() turtle.fd(20) def main(): turtle.setup(800,350) turtle.penup() turtle.fd(0) turtle.pensize(5) number(5) turtle.hideturtle() turtle.done() main()
-
- 绘制高级数码管
-
-
代码复用与函数递归
-
代码复用和模块化设计
-
代码复用
- 把代码当作资源进行抽象
- 代码资源化
- 代码抽象化
- 代码复用
- 函数和对象是代码复用的形式
- 函数
- 将代码命名
- 在代码层面进行初步抽象
- 对象
- 属性和方法
- 在函数上再次组织进行抽象
- 函数
- 把代码当作资源进行抽象
-
模块化设计
- 分而治之
- 通过函数或对象进行封装划分为模块与模块之间的表达
- 紧耦合 松耦合
- 最好是松耦合
- 分而治之
-
-
函数递归的理解
-
递归
- 函数调用函数自身
- 链条
- 计算过程存在递归链条
- 基例
- 存在一个或多个不需要递归的实例
-
-
函数递归的调用过程
-
递归的实现
- 函数+分支
-
-
函数递归实例解析
- 斐波那契数列
- 汉诺塔
-
-
模块4:PyInstaller库的使用
-
将py源代码转化为无需源代码的可执行文件
-
PyInstaller是第三方库
- (cmd命令行)pip install pyinstaller
-
使用
-
常用参数
-
-
实例8:科赫雪花小包裹
-
科赫曲线
-
代码
-
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) turtle.hideturtle() main()
-
-
雪花
- 代码
-
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=4 koch(400,level) turtle.right(120) koch(400,level) turtle.right(120) koch(400,level) turtle.hideturtle() main()
-
- 代码
-