MOOC课程python语言程序设计——5 函数和代码复用

本文详细讲解了Python中的函数定义与使用,包括参数、返回值、局部与全局变量、递归以及代码复用。介绍了七段数码管绘制、PyInstaller库用于将Python代码转换为可执行文件,并探讨了科赫雪花的绘制。强调了递归的原理及在字符串反转、斐波那契数列等场景的应用。
摘要由CSDN通过智能技术生成

5.1函数的定义与使用

1.函数是一段代码的表示

  • 特定功能的、可重用的语句组
  • 两个作用:降低编码难度+代码复用
def <函数名><参数0个或多个>):
      <函数体>
      return <返回值>
  • 函数是一种IPO的实现(输入-处理-输出)
  • 调用是运行函数代码的方式

2.函数的参数
①可以有参数,也可以没有,但别必须保留括号在这里插入图片描述

②可选参数:某些参数指定默认值,且可选参数要放在非可选参数后面,如下:(就是某些参数是函数内部设定了的,你可以在调用函数时对其进行更改设置,也可不操作,默认系统值)在这里插入图片描述
③可选参数传递: 设计可变数量参数—即不确定参数总个数 在这里插入图片描述

*b也可以时*a、*c
在这里插入图片描述
max和min函数实际定义就使用了*b的方式。它的参数就是不确定的

④参数传递的两种方式:按照位置或名称方式传递参数

指的是调用函数时,实际参数到形式参数的传递


3.函数的返回值
在这里插入图片描述
返回值为多个时,如果只赋值给一个变量,则它为元组类型;也可分开赋值


4.局部变量和全局变量
函数体内部的变量时局部变量
对于组合类型,函数体内部的一个局部变量没有被创建,但它等同于一个全局变量名字,则它就是那个全局变量,即规则二
在这里插入图片描述


5.lambda函数

谨慎使用lambda来定义匿名函数
在这里插入图片描述


5.2 实例:七段数码管绘制


5.3 代码复用与函数递归

函数和对象是代码复用的两种主要形式
把子程序当作模块内部(例如函数),主程序当作模块间的关系
在这里插入图片描述


递归:函数定义中调用函数自身的方式
① 两个关键特征:链条+基例
+ 链条:计算过程中存在递归链条关系
+ 基例:存在一个或多个不需要再次递归的实例(递归的最末端)
②递归的实现:由函数+分支语句来实现在这里插入图片描述

函数+分支结构
基例
链条

eg1:采用递归方式对字符串进行反转

def rvs(s):
    if s == "":
        return s
    else:
        return rvs(s[1:])+s[0]
a = rvs("abcde")
print(a)

eg2:斐波那契数列
在这里插入图片描述

def f(n):
    if n == 1 or n == 2:
        return 1
    else:
        return f(n-1)+f(n-2)

eg3:汉诺塔
在这里插入图片描述

count = 1
def hanoti(n,a,c,b): #本来完成的目标是把n个盘子都移过去
    if n == 1 :
        print("{}:{}->{}".format(n,a,c))
        count += 1
    else:
        hanoti(n-1,a,b,c)# 假设先把上面n-1个盘子移到b盘,不管如何移动的,反正就是链条关系,让程序自己去推
        count += 1  # 把a最下面的大盘子移到最终的C盘,由于一次只能移动一个盘子,因此此处程序计数为1,而不再是递归
        hanoti(n-1,b,c,a)# 再把b柱剩余的N-1个大盘子全部移到c柱,此时调用本身的函数,再次递归
      

5.4 PyInstaller库的使用

作用:将python源代码(.py)转换成可无需源码的可执行文件(.exe),类似编译一次性生成目标代码。
生成后的文件可以直接在任何电脑上运行,不需要安装python解释器等任何软件
在这里插入图片描述
注意:pyinstaller不是在IDLE环境中执行的,而是cmd命令!!!
_pycache 和build是可以删除的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.5 科赫雪花小包裹

eg1:科赫曲线
在这里插入图片描述
在这里插入图片描述
eg2:科赫雪花:其实就是对三角形的每一个边进行绘制
在这里插入图片描述


测验程序题:
在这里插入图片描述

def prime(m):
    for i in range(2,m):
        if m % i == 0:
            return False
    return True #注意此缩进。如果是放进for循环中,那么就相当于else。
                #但这里应该判断所有的余数是否为0,因此放在for循环外部

n = eval(input())
N = int(n)
count = 0
while count < 5:
    if prime(N):
        if count == 4:
            print(N,end="")
        else:
            print(N,end=",")
        count = count + 1 # 还有count的对应关系
    N = N + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值