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

简单演示一下求两数之和的函数,在该函数中有两个参数,调用该函数则会打印两数和的结果,每次调用传入的参数不同,打印的结果不同,使函数更加灵活

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值