基于python语言-实验二 函数式编程实验 一、实验目的 了解什么是函数式编程 了解函数式编程的优点 掌握lambda表达式、map()函数、filter()函数、reduce()函数、zip()函数的使用方法; 掌握闭包和递归函数的设计 掌握迭代器和生成器的设计 二、实验内容(包括分析或步骤) 1. 使用lambda表达式定义函数 定义函数完成z=x3+y/x3 定义函数完成z=x3+ x2+ x+1 2. 使用map()函数完成函数计算 使用map()函数依次计算[2,4,6,8,10]和[1,3,5,7,9]的乘积;(举例:2*1,4*3…..) 编写一个判断字符串是否是回文联的函数,然后使用map()函数依次判断[“abbbabbba” ,“asababaSa”, “asffbaffssa”, “attbabtgba”]是否是回文联; 3. 使用reduce()函数完成函数计算 使用reduce()函数计算[2,4,6,8,10]的乘积; 使用reduce()函数计算[2,-4,6,-2,10,-8,4,-2,5]中正数的乘积; 4. 使用filter()函数完成函数计算 使用filter()函数将[‘have a apple’,’you are student’,’hello world’]中,包含2个以上a字符的字符串过滤掉。 5. 使用递归函数设计完成计算 求第50位斐波纳契数列的值 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,利用递归算法编写程序计算共有多少种不同的走法. 三、实验实现 核心代码: # from functools import reduce 第 1 页 共 3 页 def f1(): z1 = lambda x, y: x ** 3 + y / (x ** 3) z2 = lambda x: x ** 3 + x ** 2 + x + 1 print(z1(1, 2)) print(z2(1)) def f2(): m1 = map(lambda x, y: x * y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) m2 = map(lambda s: s[-1::-1] == s, ['abbbabbba', 'asababaSa', 'asffbaffssa', 'attbabtgba']) print(list(m1)) print(list(m2)) def f3(): r1 = reduce(lambda x, y: x * y, [2, 4, 6, 8, 10]) r2 = reduce(lambda x, y: x * y if y > 0 else x, [2, -4, 6, -2, 10, -8, 4, -2, 5]) print(r1) print(r2) def f4(): f1 = filter(lambda s: s.count('a') < 2, [ 'have a apple', 'you are student', 'hello world']) print(list(f1)) def f5(): def f5_1(n=1, pre=1, pre_pre=0): if n is 1: return pre else: return f5_1(n - 1, pre + pre_pre, pre) def f5_2(n): count = 0 if n >= 2: count += f5_2(n - 1) # 1 count += f5_2(n - 2) # 2 elif n == 1: count += f5_2(n - 1) else: count = 1 return count 第 2 页 共 3 页 print(f5_1(50)) print(f5_2(10)) if __name__ == '__main__': f1() f2() f3() f4() f5() # 运行结果: 第 3 页 共 3 页 本文来源:https://www.wddqw.com/doc/bb4aafcbce1755270722192e453610661fd95ad2.html