- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
十五,定义一个函数实现反向输出一个整数。比如:输入3245,输出5432.
十七,输入三角形三个顶点的坐标,若有效则计算三角形的面积;如坐标无效,则给出提示
二十一,请问:可以给函数名进行任意命名,这句话正确吗?[动词或动词+名词]。
二十二,当函数没有返回值时,在函数内部代码最后一行会有默认代码
二十三,为了更规范的给函数添加注释,通常会在定义函数的()做解释说明
二十五,编写一个函数,用于求解圆的面积,参数为半径r,需要注意:此处的PI是固定值3.14。请尝试写出求解圆面积的最佳函数
二十七,从键盘上输入年、月,通过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值
八,全局变量和局部变量的判断题
正确
正确
正确
错误,局部变量的引用要比全局变量块.,因为局部变量存储在栈中,访问速度相对较快,而全局变量的访问可能涉及更多的查找和间接操作,
九,浅拷贝和深拷贝的判断题
正确
错误,浅拷贝只拷贝对象本身,对于子对象只是引用,不会全部拷贝子对象。
正确
十,lambda表达式的判断题
正确
正确,python中一切皆对象
正确
lambda 函数 f 不会生成函数对象,但是可以通过 f(2,3,4) 调用
错误,
十一,递归函数的判断题
正确
正确
正确,因为会生成大量的函数,会影响效率
错误,递归必须包含终止条件
十二,使用递归函数计算阶乘(factorial)
# #练习 使用递归计算阶乘
# def jiecheng(n):
# if n==1:
# return 1
# else:
# return n*jiecheng(n-1)
# print(jiecheng(3)) #3*2*1=6
十三,全局变量和局部变量的判断题2
正确
正确
错误
十四,Python在查找“名称”时,按照什么规则查找?
按照L----E-----G----BLocal 指的就是函数或者类的方法内部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]
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用