一、实验目的与要求
(1)通过本次实验,学生应掌握函数的定义与调用的基本语法,能根据需要灵活应用递归函数;
(2)掌握函数的可变参数的常见用法,以及列表作为参数传递时的注意事项;
(3)学习map函数和lambda表达式的应用;
(4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)
二、实验内容
请使用Python语言在Jupyter Notebook环境下编程,完成下列题目的要求:
1、改编自教材第120页实训1:编写一个计算列表中位数的函数。
要求根据下图给定的程序框架完善median函数的定义,并且不允许函数修改实参列表。
2、定义并调用一个名为specify的函数,实现计算多个月份的平均访客量。请根据下图给定的程序框架完善specify函数的定义,每个月的访客量数据由data列表给出。
3、定义并调用一个名为person的函数,实现人员信息的输出。请根据预期的输出效果完善下面的程序框架,要求人员的名字信息必须要有,其他信息可有可无。
4、改编自教材第120页实训2:使用map函数和lambda表达式对列表中的元素求平方。请根据下图给定的程序框架,利用map函数和lambda表达式,只填写一行代码,实现对列表中每个元素求平方。
5、定义一个递归函数实现对字符串的逆序输出。例如,对“student”字符串,调用该函数,实现逆序输出为“tneduts”。
三、主要程序清单和程序运行结果
第1题
1、改编自教材第120页实训1:编写一个计算列表中位数的函数。
要求根据下图给定的程序框架完善median函数的定义,并且不允许函数修改实参列表。
def median(ls): sorted_ls = sorted(ls) # 对列表进行排序 n = len(sorted_ls) if n % 2 == 0: mid_idx = n // 2 median = (sorted_ls[mid_idx - 1] + sorted_ls[mid_idx]) / 2 else: mid_idx = n // 2 median = sorted_ls[mid_idx] return median ls1=[26,92,-5,13,6] ls2=ls1+[117,-25,73] print("列表ls1的中位数是{}".format(median(ls1))) print("列表ls2的中位数是{}".format(median(ls2))) print("调用函数后列表ls1中的元素:",ls1) print("调用函数后列表ls2中的元素:",ls2)
运行结果:
第2题
2、定义并调用一个名为specify的函数,实现计算多个月份的平均访客量。请根据下图给定的程序框架完善specify函数的定义,每个月的访客量数据由data列表给出。
def specify(*lst): total_visitors = 0 for visitors in lst: total_visitors += data[visitors] average = total_visitors / len(lst) print("指定月份的平均访客量位{:.2f}".format(average)) data=[200,388,123,456,987,342,767,234,124,345,123,234] specify(1,2,3,4) specify(10,9,8,7,6)
运行结果:
第3题
3、定义并调用一个名为person的函数,实现人员信息的输出。请根据预期的输出效果完善下面的程序框架,要求人员的名字信息必须要有,其他信息可有可无。
def person(name,**kwargs): print(f"The information of {name} is:") for key,value in kwargs.items(): print(f"{key}:{value}") person('Alice',city='GL') person('Bob',gender='M',job='Teacher') emp1={"name":"Rose","favorite":"music","age":18} person(**emp1)
运行结果:
第4题
4、改编自教材第120页实训2:使用map函数和lambda表达式对列表中的元素求平方。请根据下图给定的程序框架,利用map函数和lambda表达式,只填写一行代码,实现对列表中每个元素求平方。
ls=[1,3,7] squared_numbers = list(map(lambda x: x**2, ls)) print(squared_numbers)
运行结果:
第5题
5、定义一个递归函数实现对字符串的逆序输出。例如,对“student”字符串,调用该函数,实现逆序输出为“tneduts”。
def reverse_string(string): if len(string) == 0: return "" else: return reverse_string(string[1:]) + string[0] result = reverse_string("student") print(result)
运行结果:
四、实验结果分析与体会
通过本次实验,掌握了函数的定义与调用的基本语法,能根据需要灵活应用递归函数。学会了函数的可变参数的常见用法,以及列表作为参数传递时的注意事项;map函数和lambda表达式的应用。
模块化和重用性:函数允许将一段代码封装成一个独立的模块,这样可以在程序中多次调用,提高了代码的重用性和可维护性。参数传递:函数可以接受输入参数,这使得函数更加灵活和通用。通过参数的传递,可以让函数处理不同的数据,实现不同的功能。返回值:函数可以返回计算结果,这样可以将函数的输出作为其他部分的输入,实现更复杂的逻辑。作用域:函数内部可以定义局部变量,这些变量只在函数内部有效,避免了命名冲突和变量污染。匿名函数和闭包:Python支持匿名函数和闭包的特性,这使得函数的使用更加灵活和方便。