本文适用于有c/c++语言基础同学,侧重记录Python独有的内容,如果有错,欢迎指出!
这一点同c++,例子:
可变数量的参数,即不确定参数总数量的参数传递
例子:n的阶乘与后面参数都相乘的结果返回(max和min函数用此法写的)
注意:可变参数只能放在函数参数的最后
参数传递有两种方式,不仅可以按顺序(位置)还可以按名称方式传递
全局和局部变量即使名字相同,也是不同变量,因此,如果要在函数内使用外部的全局变量,要使用保留字global
对于组合数据类型,其根本来说是一个指针,所以若函数内未创建同名局部变量,则可以直接使用外部定义的组合数据类型的全局变量,也就是通过指针修改外部全局变量了
对比:
说明如果同名组合数据类型在函数内被真实创建那么它就是局部变量,函数运行结束就释放了,不影响全局变量(指针)
基于turtle绘图体系
#七段数码管的绘制
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,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):
for i in date:
drawDigit(eval(i))
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate('20200430')
turtle.hideturtle()
turtle.done()
main()
第二版
import time库,用time.strftime(’%Y-%m=%d+’,time.gmtime() 返回所需格式的年月日:2020-04-30
#V2
#获取当前的年月日并画出来
import turtle,time
#用于给每一段之间留一点空白空间
def drawGap():
turtle.penup()
turtle.fd(5)
#画直线并右转90度函数
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,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):
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.fd(40)
elif i == '+':
turtle.write("日", font=("Arial", 18, "normal"))
else:
drawDigit(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()
函数,对象是对代码复用的两种主要形式
python进阶语法中可以面向对象编程
模块化设计:分而治之
模块内部紧耦合,模块之间松耦合
每个递归函数至少存在一个基例,但可能存在多个基例
表达出来递归链条(只关心n和n-1的关系)和基例即可
函数的四个参数:(搬运的数量,源柱子,目的柱子,中间的过度柱子)
基例是n==1
分支是先把n-1个圆盘从a柱子搬到中间的柱子(用目标柱子作为过渡)
然后再把a柱子中剩的最后一个柱子搬到目标柱子
然后把n-1个圆盘从中间柱子搬运到目标柱子上
用print打印搬运过程
将python源代码变成.exe的可执行文件,使得其在另一台没有python解释器的电脑可以直接运行
是第三方库,使用前需要额外安装,用pip指令安装
步骤:在cmd中
#科赫雪花绘制
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#阶数
koch(400,level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturle()
main()