【Python】函数专题(知识总结、习题精练与编程实战)

52 阅读9分钟

文章目录 1 函数简介与快速入门 2 函数使用 2.1 函数的定义与说明 2.2 函数的文档注释 2.3 函数的参数 2.4 函数的返回值 2.5 函数的嵌套调用 3 函数专项训练 3.1 斐波那契数列 3.2 素数判断 3.3 孪生素数 3.4 温度转化 3.5 豆堆问题 写在最后 1 函数简介与快速入门 函数即 把具有独立功能的代码块组织成一个小模块。 可以在开发让我们在开发程序时 提高编写效率以及提高代码的复用率。

这么说可能体会不到函数的好处,我们来实际体会一下,下面的代码块是用于打印乘法口诀表的,当程序运行时,就会打印一次乘法口诀表:

for i in range(1, 10): for j in range(1, i+1): print(j, " * ", i, " = ", i*j, end="\t") print() 1 2 3 4 如果需要将乘法口诀表打印100次呢? 难道需要将上面的代码块写 100次吗?答案是否定的,当我们学习了函数过后,只需要像下面那样定义一个函数,将打印乘法口诀表功能的代码块封装到函数里面:

def myprint(): for i in range(1, 10): for j in range(1, i+1): print(j, " * ", i, " = ", i*j, end="\t") print() 1 2 3 4 5 当需要打印乘法口诀表时,只需要调用定义过的 myprint() 函数即可,下面的代码就将乘法口诀表打印了6次!!!

myprint() myprint() myprint() myprint() myprint() myprint() 1 2 3 4 5 6 怎么样?是不是非常简洁!下面我们开始系统学习函数相关的知识~

2 函数使用 2.1 函数的定义与说明 🆔 函数声明的基本格式如下:

def 函数名(参数列表):

封装的代码
返回值
...

1 2 3 4 5 🍑 说明:

def是英文define的缩写; 函数名应该能表达函数封装代码的功能, 增加程序的可读性,也方便将来的使用; 参数列表和返回值根据程序需要选择性添加; 函数名称需要符合标识符的命名规则。 📖 标识符的命名规则:(回顾)

可以由字母、下划线和数字组成; 不能以数字开头,且不能与关键字重名。 2.2 函数的文档注释 🐱 在实际开发中,如果希望给函数添加注释,则应该在 定义函数 下方,使用 连续的三对引号 添加文档注释:

在引号中间添加对函数的说明性文字;

在函数调用的位置,使用快捷键 CTRL + Q 可以查看函数的说明信息;

在函数定义的上方,应该与其他的代码及注释保留两个空行。

2.3 函数的参数 函数的 参数在函数名后的小括号内部填写, 多个参数见以 ,分隔。 简单演示一下求两数之和的函数,在该函数中有两个参数,调用该函数则会打印两数和的结果,每次调用传入的参数不同,打印的结果不同,使函数更加灵活:

def sum(num1, num2): result = num1 + num2 print("%d + %d = %d" % (num1, num2, result))

sum(1, 3) sum(99, 1) 1 2 3 4 5 6 7 www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%98%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%B8%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… www.iimedia.cn/tag/%E6%97%… 🐍 辨析实参与形参

形参: 定义函数时,小括号内的参数,是用来接收参数的,在函数内部作为变量使用,例如上面 sum 函数中的 num1与num2; 实参: 调用函数时,小括号中的参数,是用来传递数据到函数内部使用的,例如在上述 sum 函数中的 1和3,99和1。 2.4 函数的返回值 🆔 在程序开发中,如果希望 函数在执行结束后返回一个结果,以便调用者进行后续处理, 则需要给函数一个返回值。

在函数中使用 return 关键字返回结果; 调用函数的一方,可以使用变量来接收函数的返回值; return 表示返回,当该语句执行,则后续代码不会执行。 我们对之前的求和函数设计一个返回值,使 sum 返回两数的和,在外部调用时筛选出和大于5的情况

def sum(num1, num2): return num1 + num2

for i in range(1, 6): for j in range(i, 6): result = sum(i, j) if result > 5: print(i, " + ", j, " = ", result) 1 2 3 4 5 6 7 8 9

2.5 函数的嵌套调用 🆔 即在一个函数里面调用了另外的函数,我们来看下面这段代码:

def method01(): print("method01") method02() print("method01")

def method02(): print("---method02---")

method01() 1 2 3 4 5 6 7 8 9 10 11

🐉说明:

当调用 method01 时,先执行 method01 方法体内的语句,当执行到调用 method02() 这条语句时,则先执行完 method02() 内的所有语句再执行 method01() 方法的剩余语句。 3 函数专项训练 3.1 斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

🐈 问题: 请你编写一函数 Fabonacci(n),其中参数 n 代表第 n 次的迭代,来实现求斐波那契第 n 项值的功能。

1️⃣ 方式一:使用递归 Tips:如果同学不熟悉递归,可以参考下博主的这篇文章: ❤️深入浅出悟透递归❤️

返回斐波那契数列的第 n 项

def fabonacci(n): if n == 1 or n == 2: return 1 else: return fabonacci(n-1) + fabonacci(n-2) 1 2 3 4 5 6 2️⃣ 方式二:使用循环

返回斐波那契数列的第 n 项

def fabonacci(n): if n == 1 or n == 2: return 1 else: num1 = 1 # 第一项 num2 = 1 # 第二项 result = 0 # 记录结果 while n > 2: result = num1 + num2 num1 = num2 num2 = result n = n - 1 return result 1 2 3 4 5 6 7 8 9 10 11 12 13 14 测试代码如下,用于打印斐波那契数列的前10项:

尝试打印斐波那契前10项

for i in range(1, 11): print(fabonacci(i), end=" ") 1 2 3

3.2 素数判断 质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

🐈 问题: 编写一函数 Prime(n),对于已知正整数 n,判断该数是否为素数,如果是素数,返回 True,否则返回 False。

📖 分析: 只需要循环判断一个数是否能被除了1和本身外的其他数整除

🖊 参考代码:

判断是否为素数,如果是则返回True

www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%90%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%… www.iimedia.cn/tag/%E5%8D%…

def prime(n): if n < 2: return False i = 2 while i <= n**0.5: if n % i == 0: return False i = i + 1 return True 1 2 3 4 5 6 7 8 9 10 3.3 孪生素数 🐈 问题: 利用上题中判断素数的函数,编写程序找出 1~100 之间的所有孪生素数(若两个素数之差为 2,则 这两个素数就是一对孪生素数) 。例如: 3 和 5、5 和 7、11和 13 等都是孪生素数。

🖊 参考代码:

判断是否为素数,如果是则返回True

def prime(n): if n < 2: return False i = 2 while i <= n**0.5: if n % i == 0: return False i = i + 1 return True

测试打印1-100的孪生素数

使用枚举的方式

for i in range(1, 101): if prime(i) and prime(i + 2): print(str(i) + "与" + str(i+2), end=" ")

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 🍑 运行结果:

3.4 温度转化 🐈 问题: 编写一函数,将摄氏温度与华氏温度互转。(公式: C*1.8+32=F)

🖊 分析: 本题涉及到互相转化问题,即一个函数实现两种功能,考虑设置两个参数,一个用于判断是摄氏度转华氏度还是华氏度转摄氏度,一个用于传入温度值

🖊 参考代码:

华氏度与摄氏度转化 C*1.8+32=F

def calculate(typeNum, inputnum): # typeNum 为 1 则为摄氏度转华氏度 if typeNum == 1: result = inputnum * 1.8 + 32 print(inputnum, "℃ = ", result, "F")

# typeNum 为 1 则为摄氏度转华氏度
elif typeNum == 2:
    result = (inputnum - 32) / 1.8
    print(inputnum, "F = ", result, "℃")
else:
    print("输入有误")

测试

typenum = int(input("请选择输入的类型,摄氏度/华氏度(1/2): ")) inputnum = float(input("请输入温度值: ")) calculate(typenum, inputnum)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 🍑 运行结果:

3.5 豆堆问题 🐈 问题: 堆里有 16 颗豆子,有两个玩家(假设一个玩家是电脑)每个玩家都可以从堆中的 16 颗豆子中取出 1 颗, 2 颗或者 3 颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最后 一颗豆子的玩家是输家。 请你编写程序,模拟豆堆游戏。

🖊 思路: 写一个人取豆子的函数 ; 帮电脑设计一个算法,实现取豆子的函数 ; 在主程序中进行输流调用,谁最后拿到 1 粒豆子谁就输。

🖊 参考代码:

import random

玩家

def people(n): print("-------------------------------------------") while True: pick_people = int(input("你打算取的豆子数: ")) if 1 <= pick_people <= 3: break else: print("每次取出的豆子数应为1——3,请重新输入!") continue print("豆子剩余数量:", n - pick_people) return n - pick_people

电脑

def computer(n): pick_computer = random.randint(1, 3) print("电脑玩家取出豆子数:", pick_computer) print("豆子剩余数量:", n - pick_computer) return n - pick_computer

def play(): total = 16 print("豆子的总数为:", total) while True: total = people(total) if total <= 0: print("很抱歉,你输了") break total = computer(total) if total <= 0: print("恭喜你,你赢了") break

开始游戏

play()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 🍑 运行结果:

写在最后 🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ ! 如果有问题,欢迎私信或者评论区!