头歌 python 第五章 函数
1.第1关:练习-Python函数之装饰器(time_interval)
import time
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 编写一个装饰器 time_interval,实现为函数统计运行时间的功能
def time_interval(text):
def wrapper(t):
start_time=time.time()
text(t)
end_time=time.time()
print("运行的时间是{:.2f}".format(end_time-start_time))
return wrapper
t= float(input())
@time_interval
def test(x):
time.sleep(x) #程序停止运行x秒
test(t)
2.第2关:学习-Python函数之装饰器(Verification)
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第1步:定义装饰器函数Verification,在装饰器中获取输入的账号和密码,判断账号密码是否正确
def verify_login(username, password):
# 这里模拟验证过程,假设正确的用户名是educoder',密码是'123456'
correct_username = 'educoder'
correct_password = '123456'
if username == correct_username and password == correct_password:
return True
return False
def Verification(func):
def wrapper():
username = input()
password = input()
if verify_login(username, password):
print("登录成功")
func()
else:
print("账号密码错误")
return wrapper
@Verification
def login():
# 这里可以添加登录成功后的其他操作
pass # 目前仅作为示例,不执行任何操作
# 调用login函数,由于它被@Verification装饰,所以会先执行验证过程
login()
3.第3关:练习-Python函数之生成器函数 fib()
"""
任务:定义一个生成器函数 fib(),实现打印斐波拉契数列的前 n 项。n 是用过 input 获取。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 定义生成器函数 fib(),实现斐波拉契数列的打印
def fib():
a, b = 1, 1
count = int(input())
for _ in range(count):
yield a
a, b = b, a + b
# 调用生成器函数,并打印结果
for num in fib():
print(num)
########## End ##########
4.第4关:学习-Python函数之生成器函数之计数器
"""
任务:设计一个生成器函数 count(),每次使用 next 函数调用该函数时,数字就会加 1。请编写代码实现一个从 0 开始的计数器。
"""
def count():
counter = 0 # 初始化计数器变量
while True: # 无限循环,确保生成器可以一直产生新的值
yield counter # 返回当前计数器的值
counter += 1 # 递增计数器
# 创建生成器对象
func = count()
# 读取用户输入的数字,表示要获取多少个计数器的值
num = int(input())
# 使用 for 循环和 next() 函数从生成器中获取指定数量的值
for x in range(num):
print(next(func))
5.第5关:练习-Python函数之lambda表达式
"""
任务:将下列函数转换为匿名函数,该函数的作用是得到列表中的偶数,函数参数通过 input 获取。
将列表中的偶数添加到一个新列表中,打印纯偶数的列表。
```
def func(num_list):
list1 = []
for x in num_list:
if x%2 == 0:
list1.append(x)
return list1
```
"""
# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 请使用 lambda 表达式实现本关任务
list1=eval(input())
new_list=filter(lambda x:x%2==0,list1)
print(list(new_list))
########## End ##########
6.第6关:学习-Python函数之lambda表达式
"""
任务:给定两个列表,编写一个匿名函数实现比较两个列表中对应下标位置的元素的大小,将大的元素组成一个新的列表,函数参数通过 input 获取。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 请使用map函数和lambda表达式实现本关任务
a=eval(input())
b=eval(input())
d=map(lambda x,y:max(x,y),a,b)
print(list(d))
########## End ##########
7.第7关:练习-Python函数之函数递归调用
"""
任务:给定一个嵌套列表,递归实现嵌套列表求和,打印求和后的结果。
"""
list1 = eval(input())
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 定义一个函数,递归实现嵌套列表求和,打印求和后的结果
def listsum(L):
result=0
for i in L:
if isinstance(i,list):
result +=listsum(i)
else:
result += i
return result
print(listsum(list1))
########## End ##########
8.第8关:学习-Python函数之函数递归调用
"""
任务:使用递归打印斐波拉契数列的前 n 位数字。n 通过 input 函数获取。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 定义一个函数,使用递归打印斐波拉契数列的前 n 位数字
def f(n):
if n<=2:
return 1
else:
return f(n-2)+f(n-1)
n=eval(input())
print(f(n))
########## End ##########
9.第9关:练习-Python函数之变量的作用域
"""
任务:使用变量作用域相关的关键字修改下方 Begin-End 之间的代码,使 max_value 函数实现求最大值的功能。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用变量作用域相关的关键字修改代码,使max_value函数实现求最大值的功能
def compare(x, y):
return x if x > y else y
def max_value(list_data):
# 初始化value为列表的第一个元素
value = list_data[0]
# 遍历列表中的每个元素,与当前的value进行比较,并更新value为较大的值
for x in range(1, len(list_data)):
value = compare(list_data[x], value)
return value # 返回最大值
# 测试用例
test_data = [42323, 457, 4245, 6, 3, 5463, 6, 7, 45, 725, 723, 7, 3, 46, 86, 7, 56, 8, 567, 5, 5745, 26, 34, 63, 412, 35, 4, 76585, 67, 3, 45, 4, 5, 34, 5, 47, 5686]
print(max_value(test_data)) # 输出最大值
10.第10关:学习-Python函数之变量的作用域
"""
任务:使用作用域中相关的关键字修改下列 begin-end 中的代码,使函数 average 实现计算平均分的功能。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 请使用作用域相关的关键字修改下列代码,实现计算平均分的功能
def average(*args):
total = sum(args)
return total / len(args)
result = average(56, 76, 84, 98, 78, 79, 89, 67, 86, 78, 67, 67, 95, 24, 96, 96, 86, 65, 83, 86, 80)
print(result)
11.第11关:练习-Python函数之函数嵌套定义
"""
任务:定义一个函数 statistic() 和一个嵌套函数 count() ,statistic() 函数参数接收一个字符串,
返回字符串中每个字符及该字符出现次数的一个字典,count() 函数用于计算每个字符在字符串中出现的次数。
函数中需要用到的字符串通过 input() 获取。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 定义statistic()函数
def statistic(string):
string1=list(string)
def count(char,string1):
num=0
for i in string1:
if i==char:
num+=1
return num
dection={}
for i in string1:
dection[i]=count(i,string1)
return dection
# 定义嵌套函数count()
# 获取字符串,调用函数并输出结果字典
string=input()
print(statistic(string))
########## End ##########
12.第12关:学习-Python函数之函数嵌套定义
"""
任务:定义一个 compare 函数和一个嵌套函数 max_value,compare 函数用于比较两个数的大小,max_value 函数用于得到一串整型数据中的最大值。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 使用函数的嵌套定义完成两个函数的创建
def max_value(list_data):
value = list_data[0]
def compare(x,y):
return x if x > y else y
for x in range(1,len(list_data)):
value = compare(list_data[x],value)
return value
##########End##########
# 请勿修改下列函数调用的代码
max_number = max_value(eval(input())) # eval(input())是将输入的字符串转换为列表
print(max_number)
13.第13关:练习-Python函数之函数嵌套调用
"""
任务:编写函数 count() 和 statistic(),statistic() 函数参数接收一个字符串,返回字符串中每个字符及该字符出现次数的一个字典,count() 函数用于计算每个字符在字符串中出现的次数。函数中需要用到的字符串通过 input() 获取。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 定义count()函数
# 定义 statistic()函数
# 获取字符串,调用函数并输出结果字典
# 定义 statistic()函数
def statistic(string):
result = {}
str_list = list(string)
def count(char,str_list ):
num = 0
for x in str_list :
if x == char:
num += 1
return num
for x in str_list:
result[x] = count(x,str_list )
return result
string = input()
print(statistic(string))
##########End##########
14.第14关:学习-Python函数之函数嵌套调用
"""
任务:定义一个 compare 函数和一个 max_value 函数,compare 函数用于比较两个数的大小,
max_value 函数用于得到一串整型数据中的最大值。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 第一步:定义compare函数,返回两个数中较大的值
def compare(x,y):
return x if x > y else y
# 第二部:定义max_value函数,返回数据中的最大值
def max_value(list_data):
value = list_data[0]
for x in range(1,len(list_data)):
value = compare(list_data[x],value)
return value
##########End##########
# 请勿修改下列函数调用的代码
max_number = max_value(eval(input())) # eval(input())是将输入的字符串转换为列表
print(max_number)
15.第15关:练习-Python函数之函数返回值
"""
任务:定义一个函数 average,用于计算考试成绩的平均分,每次传入的参数个数不确定,如果参数中出现了小于 0 或者大于 100 的数时,输出"分数数据异常",否则输出平均分。
"""
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 定义函数 average,计算平均分并按照要求返回结果
def average(*args):
num = 0
for x in args:
if x<0 or x>100:
return
num += x
return num/len(args)
##########End##########
# 请勿修改下列代码
score = eval(input()) # 将输入的字符串转换为可执行的表达式
if score:
print("平均分为",score)
else:
print("分数数据异常")
16.第16关:学习-Python函数之函数返回值
"""
任务:创建一个函数 Number,函数的功能为判断一个整数是否为正数,如果是正数,返回 True,如果是不是正数,
返回 False。被判断的整数都是通过 input 获取。如果是正数,打印"是正数",如果不是正数,打印"不是正数"。
"""
num = int(input()) # 被判断的整数
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 第一步:创建一个函数 Number,函数的功能为判断数字是否是正数,如果是正数,返回 True,如果是负数,返回 False
def Number(num):
if num > 0:
return True
else:
return False
# 第二步:判断函数的返回值,按照任务要求打印信息
if Number(num):
print('是正数')
else:
print('不是正数')
##########End##########
17.第17关:练习-Python函数之函数参数
"""程序代码
任务:自定义函数 ScoreAverage,该函数的作用是计算学生成绩的平均分,但是学生人数未知;
成绩的输入方式通过给函数传递参数来实现,请编写代码实现计算平均分。
"""
#请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
##########Begin##########
# 使用可变参数实现函数的功能,返回学生成绩的平均分
def ScoreAverage(*score):
result = sum(score)
scores = result / len(score)
return scores
##########End##########
# eval()是Python的内置函数,它能将字符串转换为可执行的表达式,并返回表达式的值
score = eval(input())
ScoreAverage(score)
print("平均分为",score)
18.第18关:学习-Python函数之函数参数
"""
任务:自定义函数message,实现学生的信息输出。
"""
'''
定义函数message,参数有位置参数name,默认参数age(默认值为6),可变参数scores,
关键字参数kw
'''
########### Begin ###########
# 第一步:定义参数
def message(name,age=6,*scores,**kw):
# 第二步:对可变参数scores进行求和,将结果赋值给result
result = sum(scores)
# 第三步:通过print打印信息,输出格式可以参考下方的测试集
print("name: {0} age: {1} result: {2} kw: {3}".format(name,age,result,kw))
########### End ###########
# 以下为测试代码,不是本实训要求掌握的内容,请不要修改
if __name__=='__main__':
sign = int(input())
if sign == 0:
name = input()
message(name)
elif sign == 1:
name = input()
age = input()
message(name, age = age)
elif sign == 2:
name = input()
age = input()
score1 = int(input())
score2 = int(input())
message(name,age, score1, score2)
elif sign ==3:
name = input()
age = input()
score1 = int(input())
score2 = int(input())
kw = {'hobby':'basketball'}
message(name,age,score1, score2, **kw)
else:
name = input()
age = input()
score1 = int(input())
score2 = int(input())
kw = {'height':122, 'weight': 20}
message(name,age, score1, score2, **kw)
19.第19关:练习-Python函数之函数定义与调用之计算圆面积
"""
任务:创建函数 circle_area,它有一个参数,表示圆的半径,半径值通过 input 函数获取。该函数用于实现圆的面积计算,并返回面积结果。
"""
from math import pi
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第一步:创建函数 circle_area
def circle_area(r):
area = r*r*pi
return area
# 第二步:计算圆的面积计算,并返回面积结果
########## End ##########
r = int(input())
area = circle_area(r)
print("圆的面积为",area)
20.学习-Python函数之函数定义与调用之四则运算计算器的简单实现
"""
任务:自定义函数calculate,实现 2 个数之间的加、减、乘、除运算,并返回结果值。
函数calculate接收三个参数,其中第一个参数为符号判断值,第二个参数为第一个运算数,
第三个参数为第二个运算数。符号判断值有4个,分别为1、2、3、4,依次对应加、减、乘、
除运算。
"""
# 定义函数calculate
def calculate(sign,var1,var2):
# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########### Begin ###########
# 第一步:判断sign是否等于1,等于1的话,进行加法运算,并将结果赋值给temp
if sign == 1:
temp = var1 + var2
# 第二步:判断sign是否等于2,等于2的话,进行减法运算,并将结果赋值给temp
elif sign == 2:
temp = var1 - var2
# 第三步:判断sign是否等于3,等于3的话,进行乘法运算,并将结果赋值给temp
elif sign == 3:
temp = var1 * var2
# 判断sign是否等于4,等于4的话,进行除法运算
else:
# 判断被除数var2是否等于0,等于0的话,返回“被除数var2不能是0!”
if var2 == 0:
return '被除数var2不能是0!'
# 第四步:被除数var2不等于0,进行除法运算,并将结果赋值给temp
elif var2 != 0:
temp = var1 / var2
########### End ###########
return temp # 返回结果值
sign = int(input()) # 从后台获取数据sign
var1 = int(input()) # 从后台获取数据var1
var2 = int(input()) # 从后台获取数据var2
result = calculate(sign,var1,var2) # 得到计算结果
print(result) # 打印计算结果
作者:ππ抓蛙