Python_note5 函数和代码复用+PyInstaller库+数码管绘制

函数的定义与使用
  • 函数定义时,参数是输入、函数是处理、结果是输出IPO
  • 实参代替形参—调用;可以有参数,也可以没有参数,必须有括号
  • 有默认值的可选参数在非可选参数之后def fun(<非可选参>,<可选参>):
  • 可变参数传递
#计算n!再乘未知个数的数
def fact(n,*b):
	s=1
	for i in range(1,n+1):
		s *= i
	for item in b:
		s *= item
	return s
#>>>fact(10,3,5,8)   #10!*3*5*8
  • 参数传递
    def fact(n,m=1):位置传递fact(10,5);名称传递fact(m=5,n=10)
  • 函数返回值
    可返回0或多个结果 return s//m,n,m返回形式(73223,10,5)元祖类型(,)
  • 局部和全局变量
    局部变量是函数内部的占位符,函数结束后释放,基本数据类型无论是否重名都不同
    使用global保留字在函数内部使用全局变量
    局部变量为组合数据类型且未真实创建,等同于全局变量ls
ls = ['s','dd']#使用[]真实创建一个全局变量列表ls
def func(a):
	ls.append(a)
	return
func("C");print(ls)
lambda函数[特殊]

lambda函数返回函数名作为结果,没有名字的函数(匿名函数)—一般用def
使用lambda保留字定义简单的、在一行内表示的函数 <函数名>=lambda<参数>:<表达式>

f = lambda x , y : x + y
#>>>f(10,15)#得25
f = lambda : “lambda函数”
print(f())
实例7:七段数码管绘制

起点处海龟朝向x轴正方向

#sevenDigtial.py
import turtle as t
import time
def drawGap():#为了美观增加间隔
    t.penup()
    t.fd(5)
def drawLine(draw):
    drawGap()
    t.pendown() if draw else t.penup()
    t.fd(40)
    drawGap()
    t.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)
    t.left(90)#走完第四段回到起点头仍转向X轴正方,左手边转90海龟朝Y轴正向
    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)#走完第七段方向为X负轴
    t.left(180)#海龟转向X正轴
    t.penup()
    t.fd(20)#向右跳一段距离绘制下个数字
def drawDate(date):#date为日期格式"%Y-%m+%d="对应于-+=绘制年月日汉字t.write
    t.pencolor("green")
    for i in date:
        #t.pencolor("green")此处设置red导致后续颜色设置失效
        if i == '-':
            t.write('年',font=("Arial",18,"normal"))#输出到年都为红色
            t.pencolor("red")
            t.fd(40)
        elif i == '+':
            t.write('月',font=("Arial",18,"normal"))
            t.pencolor("blue")
            t.fd(40)
        elif i == '=':
            t.write('日',font=("Arial",18,"normal"))
        else:
            drawDigit(eval(i))#字符串转数字并画出
def main():
    t.setup(900,350,200,200)#画布大小,相对位置
    t.penup()
    t.fd(-400)#起点(300,0)
    t.pensize(5)
    drawDate(time.strftime("%Y-%m+%d=",time.gmtime()))#获取计算机格式时间并转换为固定格式
    t.hideturtle()#绘制完毕隐藏turtle
    t.done()
main()

模块化思维(确定模块接口封装功能);规则化思维(抽象过程为规则自动执行);化繁为简

代码复用与函数递归
  • 函数和对象是代码复用的两种主要形式;函数在代码层面建立初步抽象;对象在函数之上再次组织进行抽象,属性和方法<a>.<b>和<a>.<b>()
  • 模块化设计 分而治之
    通过函数或对象封装将程序划分为模块及模块间的表达;具体包括:主程序、子程序、和子程序间的关系;分而治之是一种分而治之,分层抽象,体系化的设计思想
    紧耦合:两部分间交流很多,无法独立存在;松耦合:两部分间交流很少,可独立存在
    模块内部紧耦合,模块之间松耦合
  • 递归 — 数学归纳法在编程中的体现
    关键特征存在链条(计算过程中递归链条)和基例(一个或多个不需要再次递归部分)
    字符串反转斐波那契汉诺塔
    切片 s[::-1]
    递归
def rvs(s):
	if s == "" :
		return s
	else :
		return rvs[1:] + s[0]#第一步看成第一个字符与后面所有的反转
count = 0
def hanoi(n,src,dst,mid):
	global count
	if n == 1 :#基例
		print("{}:{}->{}".format(1,src,dst))
	else :#链条
		hanoi(n-1,src,mid,dst)#n-1搬到mid
		print("{}:{}->{}".format(n,src,dst))#最下面的搬到dst
		count += 1
		hanoi(n-1,mid,dst,src)

在这里插入图片描述

模块4:PyInstaller库的使用

系统未安装idle或者解释器,将.py源代码转换成无需源代码的可执行文件,如exe(windows)
PyInstaller第三方库需要用pip工具安装 download
windows cmd命令行pip install pyinstaller
pyinstaller -i curve.ico -F <**.py>

实例8:科赫雪花小包裹

分形集合是一种迭代的几何图形,广泛存在。科赫曲线也叫雪花曲线
取一条直线,中间去掉三分之一,并由60°夹角的两条线连接原来断裂的两个三分之一线段(共4段三分之一线段);新的每条小线段继续做科赫曲线----二阶

#KochDraw.py
import turtle as t
def koch(size,n):
    if n == 0:
        t.fd(size)
    else :
        for angle in [0,60,-120,60]#递归
            t.left(angle)
            koch(size/3,n-1)
def main():
    t.setup(600,600)
    t.penup()
    t.goto(-200,100)
    t.pendown()
    t.pensize(2)
    level=3
    koch(400,level)#将一个400长度的等边三角形 每个边画出3阶科赫曲线
    t.right(120)#转动 等边三角形边长夹角
    koch(400,level)
    t.right(120)#等边三角形边长夹角
    koch(400,level)
    t.hideturtle()
main()

科赫曲线基础设置修改如修改成凸形,封闭基础图不选等边三角选五边形八边形形成变化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值