八,Python之函数的综合练习(匿名函数,递归,闭包,深拷贝,浅拷贝,全局变量,局部变量等)

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

目录

一,本章知识简介

二,聊聊函数(function)的基本概念

三,函数的分类有哪些?

四,用自己的话聊聊函数

五,形式参数和实际参数的判断题

六,定义一个打印n个星号的无返回值的函数

七,函数的返回值的判断题

八,全局变量和局部变量的判断题

九,浅拷贝和深拷贝的判断题

十,lambda表达式的判断题

十一,递归函数的判断题

十二,使用递归函数计算阶乘(factorial)

十三,全局变量和局部变量的判断题2

十四,Python在查找“名称”时,按照什么规则查找?

十五,定义一个函数实现反向输出一个整数。比如:输入3245,输出5432.

十六,编写一个函数,计算下列的数列

十七,输入三角形三个顶点的坐标,若有效则计算三角形的面积;如坐标无效,则给出提示

十八,输入一个毫秒数,将该数字换算成小时数,分数中,秒数

十九,定义一个函数的时候需要使用什么关键字?

二十,请问:使用函数可以提升代码的阅读性,这句话正确吗?

二十一,请问:可以给函数名进行任意命名,这句话正确吗?[动词或动词+名词]。

二十二,当函数没有返回值时,在函数内部代码最后一行会有默认代码

二十三,为了更规范的给函数添加注释,通常会在定义函数的()做解释说明

二十四,请问:局部变量只作用于局部作用域内,这句话正确吗?

二十五,编写一个函数,用于求解圆的面积,参数为半径r,需要注意:此处的PI是固定值3.14。请尝试写出求解圆面积的最佳函数

二十六,定义一个可以用于同时求解3个数的和与差的函数。

二十七,从键盘上输入年、月,通过return关键字来写一个函数,并返回当前月份的天数,例如30、31等。

二十八,定义一个函数calculate_area(length, width=None),如果只传入一个参数,认为是正方形,计算并返回其面积;如果传入两个参数,认为是长方形,计算并返回其面积。

二十九,定义义一个函数apply_function(func, numbers),该函数接受一个函数func和一个数字列表numbers作为参数,将函数func应用于列表中的每个数字,并返回结果列表。


一,本章知识简介

函数的综合练习题


 回顾前面的知识

pyhthon学习路线:

  • 前置:
    • pyhton的概述
    • pyhton环境安装;
  • 基础:
    • 注释
    • 标识符
    • 关键字
    • 变量
    • 数据类型
    • 输入
    • 输出
    • 运算符
  • 控制语句
    • 选择分支 
    • 循环结构
  • 序列(容器)
    • 字符串
    • 列表
    • 元组
    • 字典
    • 集合
  • 函数
    • 函数的定义与调用
    • 函数的底层
    • 参数的传递
    • 参数的类型
    • 匿名函数lambda
    • 递归函数
    • 嵌套函数
    • 全局变量与局部变量
    • LEGB规则
       

前面的知识详情见 我前面的博客:

https://blog.csdn.net/qq_55006020/category_12365311.html?spm=1001.2014.3001.5482

二,聊聊函数(function)的基本概念

一个程序由一个一个的任务组成;函数就是代表一个任务或者一个功能(function)。
函数是代码复用的通用机制

三,函数的分类有哪些?

内置函数,标准库函数,第三方库函数,自定义函数

四,用自己的话聊聊函数

一个程序由一个个任务组成;函数就是代表一个任务或者一个功能;
函数是代码复用的通用机制;
如果函数体中包含 return 语句,则结束函数执行并返回值;
python在执行del的时候 会创建一个函数对象.

五,形式参数和实际参数的判断题

函数定义时,参数是形式参数。

正确

定义时的形式参数不需要声明类型,也不需要指定函数返回值类型

正确

调用时的实际参数必须与形参列表一一对应

正确

函数调用时,参数是形式参数。

错误,函数调用的时候,参数是实际参数

六,定义一个打印n个星号的无返回值的函数

def print_star(n):
   print("*"*n)

print_star(5)

七,函数的返回值的判断题

如果函数体中包含 return 语句,则结束函数执行并返回值

正确

如果函数体中不包含 return 语句,则返回 None
正确
要返回多个返回值,使用列表、元组、字典、集合将多个值 存起来” 即可
正确
如果函数体中不包含 return 语句,则不返回任何值
错误,及时函数中灭有return 也会返回一个none值

八,全局变量和局部变量的判断题

全局变量:在函数和类定义之外声明的变量。作用域从定义位置开始直到模块结束
正确
局部变量:在函数体中(包含形式参数)声明的变量
正确
如果局部变量和全局变量同名,则在函数内隐藏全局变量,只 使用同名的局部变量
正确
局部变量的引用和全局变量一样快
错误,局部变量的引用要比全局变量块.,因为局部变量存储在栈中,访问速度相对较快,而全局变量的访问可能涉及更多的查找和间接操作,

九,浅拷贝和深拷贝的判断题

浅拷贝使用函数: copy ( 浅拷贝),深拷贝使用函数: deepcopy ( 深拷贝 )
正确
浅拷贝: 拷贝对象,也全部拷贝子对象
错误,浅拷贝只拷贝对象本身,对于子对象只是引用,不会全部拷贝子对象。
深拷贝: 拷贝对象,也全部拷贝子对象
正确

十,lambda表达式的判断题

lambda 函数是一种简单的、在同一行中定义函数的方法
正确
lambda 函数实际生成了一个函数对象
正确,python中一切皆对象
ambda 表达式只允许包含一个表达式,该表达式的计算结果就是函数的返回值
正确

lambda 函数 f 不会生成函数对象,但是可以通过 f(2,3,4) 调用

错误,

十一,递归函数的判断题

递归函数指的是:自己调用自己的函数
正确
深度优先搜索( DFS:Depth First Search )中使用了递归算法
正确
在处理大量数据时,谨慎使用
正确,因为会生成大量的函数,会影响效率
递归函数可以不包含 终止条件
错误,递归必须包含终止条件

十二,使用递归函数计算阶乘(factorial)

# #练习 使用递归计算阶乘
# def jiecheng(n):
#     if n==1:
#         return 1
#     else:
#         return n*jiecheng(n-1)
# print(jiecheng(3))  #3*2*1=6

十三,全局变量和局部变量的判断题2

nonlocal 用来声明外层的局部变量。 global 用来声明全局变量。
正确
函数内用 global 声明全局变量,然后才可以使用全局变量
正确
函数内不用 nonlocal 声明变量,也可以使用外层的局部变量
错误

十四,Python在查找名称时,按照什么规则查找?

按照L----E-----G----B
Local 指的就是函数或者类的方法内部
Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global 指的是模块中的全局变量
Built in 指的是Python为自己保留的特殊名称

十五,定义一个函数实现反向输出一个整数。比如:输入3245,输出5432.

for循环解法:

def re_int(args):
    s=str(args)
    s1=''
    for i in range(len(s)-1,-1,-1):
        # print(i,s[i])
        s1=s1+s[i]
    # print(s1)
    return int(s1)

print(re_int(23456))

while循环机解法: 

#用while循环
def re_int2(args):
    s=str(args)
    s1=''
    n=len(s)-1
    while n>=0:
        # print(s[n])
        s1 = s1+s[n]
        n=n-1
    return int(s1)


print(re_int2(23456))

十六,编写一个函数,计算下列的数列

def fn(m):
    '''这一个计算数列的递归函数,可以实现m=1/2+2/3+……+n/n+1'''
    if m==1:  #确定递归的终止条件,如果m-1到等于1的时候,直接给个值,结束递归。
        return 0.5  #当m等与1的时候 1/(1+2)=0.5  所以直接给个值0.5
    else:
        return fn(m-1)+m/(m+1) 
#递归计算:如果m=1  则f(1)直接返回值为0.5  毕竟0+1/2 也是等于0.5 
#如果m=2  则fn(2)所输出的值就是 fn(1)+2/3  那么就是1/2+2/3  得到结果
#如果m=3  则fn(3)所输出的值就是fn(2)+3/4 也就是1/2+2/3+3/4
#如果m=4 则f(n4)就是fn(3)+4/5    也就是1/2+2/3+3/4+4/5
#以此类推 实现1/2+2/3+3/4+ ……+n/(n+1)
while True:  #循环测试
    n = input('请务必输入大于0的整数,否则重新输入:')
    if n.isdigit(): #判断用户传入的是否是数字
        print(fn(int(n))) #调用函数
    else:
        print('不要闹,请输入整数')

十七,输入三角形三个顶点的坐标,若有效则计算三角形的面积;如坐标无效,则给出提示

import math

def calculate_triangle_area(x1, y1, x2, y2, x3, y3):
    side1 = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
    side2 = math.sqrt((x3 - x2)**2 + (y3 - y2)**2)
    side3 = math.sqrt((x1 - x3)**2 + (y1 - y3)**2)
    # 判断是否能构成三角形
    if side1 + side2 > side3 and side1 + side3 > side2 and side2 + side3 > side1:
        s = (side1 + side2 + side3) / 2
        return math.sqrt(s * (s - side1) * (s - side2) * (s - side3))
    else:
        return None

x1, y1 = map(float, input("输入第一个顶点的坐标,用空格分隔:").split())
x2, y2 = map(float, input("输入第二个顶点的坐标,用空格分隔:").split())
x3, y3 = map(float, input("输入第三个顶点的坐标,用空格分隔:").split())

area = calculate_triangle_area(x1, y1, x2, y2, x3, y3)
if area is None:
    print("输入的坐标不能构成三角形。")
else:
    print(f"三角形的面积为:{area}")

十八,输入一个毫秒数,将该数字换算成小时数,分数中,秒数

import time

def time_h_m_s(ms):
    s=ms/1000
    m=s/60
    h=m/60
    return h,m,s


print(time_h_m_s(int(time.time())*1000))

十九,定义一个函数的时候需要使用什么关键字?

def

二十,请问:使用函数可以提升代码的阅读性,这句话正确吗?

正确

二十一,请问:可以给函数名进行任意命名,这句话正确吗?[动词或动词+名词]。

最好不要,遵循良好的代码编写规范,

二十二,当函数没有返回值时,在函数内部代码最后一行会有默认代码

retrun None

二十三,为了更规范的给函数添加注释,通常会在定义函数的()做解释说明

第一行

二十四,请问:局部变量只作用于局部作用域内,这句话正确吗?

正确

二十五,编写一个函数,用于求解圆的面积,参数为半径r,需要注意:此处的PI是固定值3.14。请尝试写出求解圆面积的最佳函数

# 定义函数
def get_area(r,pi=3.14):
    area = pi * r * r
    print(f"求圆的面积为:{area}")

# 调用函数
get_area(2)

二十六,定义一个可以用于同时求解3个数的和与差的函数。

# 定义函数
def get_result(a,b,c):
    # 和
    ret1 = a + b + c
    # 差
    ret2 = a - b - c
    return ret1,ret2

# 调用
he,cha = get_result(78,34,10)
print(f"三个数之和为:{he}")
print(f"三个数之差为:{cha}")

二十七,从键盘上输入年、月,通过return关键字来写一个函数,并返回当前月份的天数,例如30、31等。

【提示:闰年就是能被4整除,且不能被100整除,或者能被400整除的年份。

def get_m_d(year,month):
    if month in (1,3,5,7,1,10,11):
        return 31
    elif month in (4,6,9,11):
        return 30
    elif month==2:#判断闰年公式
        if (year%4==0) and (year%100!=0) or (year%400==0):
            return 29
        else:
            return 28
    else:
        return '不规范'


print(get_m_d(2024, 9))

二十八,定义一个函数calculate_area(length, width=None),如果只传入一个参数,认为是正方形,计算并返回其面积;如果传入两个参数,认为是长方形,计算并返回其面积。

def calculate_area(length, width=None):
    if width is None:
        return length * length
    else:
        return length * width

二十九,定义义一个函数apply_function(func, numbers),该函数接受一个函数func和一个数字列表numbers作为参数,将函数func应用于列表中的每个数字,并返回结果列表。

def apply_function(func, numbers):
    return [func(num) for num in numbers]

  • 学习:知识的初次邂逅
  • 复习:知识的温故知新
  • 练习:知识的实践应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值