【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《基于python语言-实验二 函数式编程实验》,欢迎阅读!
基于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.wddqxz.cn/bb4aafcbce1755270722192e453610661fd95ad2.html