简单演示一下求两数之和的函数,在该函数中有两个参数,调用该函数则会打印两数和的结果,每次调用传入的参数不同,打印的结果不同,使函数更加灵活:
def sum(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum(1, 3)
sum(99, 1)
🐍 辨析实参与形参
- 形参: 定义函数时,小括号内的参数,是用来接收参数的,在函数内部作为变量使用,例如上面 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)
2.5 函数的嵌套调用
🆔 即在一个函数里面调用了另外的函数,我们来看下面这段代码:
def method01():
print("method01")
method02()
print("method01")
def method02():
print("---method02---")
method01()
🐉说明:
- 当调用 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)
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
测试代码如下,用于打印斐波那契数列的前10项:
# 尝试打印斐波那契前10项
for i in range(1, 11):
print(fabonacci(i), end=" ")
3.2 素数判断
质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
🐈 问题: 编写一函数 Prime(n),对于已知正整数 n,判断该数是否为素数,如果是素数,返回 True,否则返回 False。
📖 分析: 只需要循环判断一个数是否能被除了1和本身外的其他数整除
🖊 参考代码:
# 判断是否为素数,如果是则返回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
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=" ")
🍑 运行结果:
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)
🍑 运行结果:
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
# 电脑
![img](https://img-blog.csdnimg.cn/img_convert/3564ef4c8e12e8a1b955d03a8ed5468c.png)
![img](https://img-blog.csdnimg.cn/img_convert/70783594898b3bca7db19cafa32e71ea.png)
![img](https://img-blog.csdnimg.cn/img_convert/b80dd4bb0ab63da10020e68e834a5d64.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
JHxbHwVA-1714260891264)]
[外链图片转存中...(img-LrEJEaOw-1714260891265)]
[外链图片转存中...(img-LhdMdPKj-1714260891265)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**