函数和代码的复用
函数的定义和使用
定义:
- 一段具有特定功能,可复用的语句组
- 函数时一种功能抽象,表达特定的功能
- 作用:降低编程难度和代码的复用
- 只有被调用才会被执行
def <函数名>(<参数>):
函数体
return <返回值>
计算 n!
调用过程
a=fact(10):调用函数fact(n)用实际参数代替形式参数,将返回值赋值给a
参数传递
- 函数可以有参数,也可以没有参数
- 可选参数,即为某些参数提供默认值,非可选的参数必须放在前面。
def <函数名>(<非可选参数>,<可选参数>):
函数体
return <返回值>
对于可变参数的数量可以不确定,在函数调用时给出实际的参数
函数调用时,参数可以按照位置或者名称方式进行传递
返回值 - 函数可以返回0或者多个返回值
- 函数也可以没有返回值
局部变量和全局变量
在函数外部定义的变量为全局变量
在函数中定义的变量为局部变量
使用规则 - 局部变量是函数内部的占位符,与全局变量可能重名但不同
- 函数运算结束后,局部变量被释放
- 可以使用global保留字在函数内部使用全局变量
如果某全局组合数据类型在函数内被重新创建,那么该组合数据类型就是局部变量,函数结束后,就会被释放,而其结果还是全局变量的值。
lambda函数
一般情况,用def定义普通函数
实例:七段数码管的绘制turtle绘图体系
用七段数码管绘制时间:
- 绘制单个数字对应的数码管
- 获得一串数字,绘制对应的数码管
- 获得当前系统的时间,绘制对应的数码管
模块化思维:确定模块接口,封装功能
规则或思维:抽象过程为规则,计算机自动执行
化繁为简:将大功能分解为小功能,在进行组合。
函数的代码复用与递归
递归本身就是一个函数,
利用分支,用基例和链条分别代码实现
斐波那契数列的求解
f(n)=f(n-1)+f(n-2)
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
汉若塔问题的递归
count=0
def haoi(n,src,dst,mid):
global count
if n==1:
print("{}:{}->{}".format(1,src,dst))
count +=1
else:
haoi(n-1,src,mid,dst)
print("{}:{}->{}".format(n,src,dst))
count+=1
haoi(n-1,mid,dst,src)
pyinstaller库的使用
在Windows平台下饿cmd命令行下安装,或者在Linux下安装
打开cmd命令行:执行命令 :pip install pyinstaller
程序会自动下载安装
安装成功后会有successful installed的提示
pyinstaller库的使用
一定要在cmd下执行
七段数码管程序的运行:在dist文件中会有一个与文件名同名的文件,打开即可执行
pyinstaller参数使用
打包后的程序可以在没有pyinstaller的环境下直接执行
程序的打包过程,先找到一个图标文件,后缀名为.ico,将其放在源程序同一个目录下,执行pyinstaller -i curve.ico -f sevendigitsdrawv2.py
得到的文件是规定了图标的可执行文件。
也可以直接执行pyinstaller -F sevendigitsdrawv2.py
就会在dist文件夹中生成一个与源程序同名的可执行文件。
该文件可以在没有安装pyinstaller的电脑上运行
柯赫雪花小包裹
柯赫曲线的绘制
#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():
turtlr.setup(800,400)
turtle.penup()
turtle.goto(-300,-50)
turtle.pendown()
turtle.pensize(2)
koch(600,3) #3阶柯赫曲线,长度为600
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():
turtlr.setup(600,600)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
level=3
koch(400,level) #3阶柯赫曲线
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle() #海龟的隐藏
main()
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
def prime(m):
for i in range(2,int(pow(m,0.5)+1)):
if m%i==0:
return False
else:
return True
n = eval(input())
if n != int(n): # 因为可能输入有浮点数
n = int(n) + 1
else: # 保证输入5.0时,输出为整数5。这里只根据题目中只输入正浮点或者正整数时做的处理
n = int(n)
count = 5
while count > 0:
if prime(n):
if count > 1:
print(n, end=',')
else:
print(n)
count -= 1
n += 1
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注…的地方补充一行或多行代码。
def cmul(a,*b):
s=a
for i in b:
s*=i
return s
print(eval("cmul({})".format(imput()))