您的位置:首页 > 编程语言 > Python开发

Python学习五函数代码的复用

2019-07-31 22:14 477 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_43328816/article/details/97927093

函数和代码的复用

函数的定义和使用
定义:

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

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
得到的文件是规定了图标的可执行文件。
也可以直接执行py 7ff7 installer -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()))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: