Python学习五函数代码的复用

函数和代码的复用

函数的定义和使用
定义:

  • 一段具有特定功能,可复用的语句组
  • 函数时一种功能抽象,表达特定的功能
  • 作用:降低编程难度和代码的复用
  • 只有被调用才会被执行

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()))



发布了43 篇原创文章 · 获赞 11 · 访问量 2609

猜你喜欢

转载自blog.csdn.net/weixin_43328816/article/details/97927093