Python 实验三
函数
实验目的:
(1)掌握函数的定义和调用方法。
(2)掌握函数参数传递原理和方法。
(3)掌握匿名函数、嵌套函数、递归函数的创建和调用方法。
(4)掌握变量类型和作用域。
实验内容:
1、编写两个函数,其中一个函数计算并返回裴波那契数列第i项(使用递归函数实现),另一个函数计算并返回裴波那契数列前10项的和,并对其进行测试。
# 1、编写两个函数,其中一个函数计算并返回裴波那契数列第i项(使用递归函数实现),另一个函数计算并返回裴波那契数列前10项的和,并对其进行测试。"""
求斐波那契数列第n项以及前n项和
斐波那契数列:从第二项开始,每一项都等于前两项之和
1,1,2,3,5,8,13,21,34,55,89,144,...
"""
n = int(input("请输入要求斐波那契数列第几项:"))
Sum = 0 # 定义初始总和def number(x): # 定义一个number方法,用来求第X项的数if x == 1 or x == 2:return 1else:return number(x - 2) + number(x - 1)for a in range(1, 11):Sum = number(a) + Sum
print("第%d项为:%d,前十项和为%d" % (n, number(n), Sum))
2、编写一个函数func(str),计算并返回字符串str中的数字、字母及其他类型字符的个数。
# 2、编写一个函数func(str),计算并返回字符串str中的数字、字母及其他类型字符的个数。content = input('输入字符串')def func(s):dic = {'num': 0,'alpha': 0,'space': 0,'other': 0}for i in s:if i.isdigit():dic['num'] += 1elif i.isalpha():dic['alpha'] += 1elif i.isspace():dic['space'] += 1else:dic['other'] += 1return dicprint(func(content))
3、有5个人坐在一起。向第5个人询问其岁数,他说他比第4个人大2岁;向第4个人询问其岁数,他说他比第3个人大2岁;向第3个人询问其岁数,他说他比第2个人大2岁;向第2个人询问其岁数,他说他比第1个人大2岁;向第1个人询问其岁数,他说他10岁。问:第5个人的岁数是多少(分别使用非递归函数和递归函数实现)?
# 3、有5个人坐在一起。向第5个人询问其岁数,他说他比第4个人大2岁;向第4个人询问其岁数,他说他比第3个人大2岁;向第3个人询问其岁数,他说他比第2个人大2岁;向第2个人询问其岁数,他说他比第1个人大2岁;向第1个人询问其岁数,他说他10岁。问:第5个人的岁数是多少(分别使用非递归函数和递归函数实现)?
print('递归方法', end=' ')def func(n):if n == 1:return 10else:return func(n - 1) + 2print(f"第五个人的岁数为{func(5)}岁")print('非递归方法', end=' ')def func1(n):if n == 1:return 10else:return 10 + (n - 1) * 2print("第五个人的岁数是:", func1(5), '岁')
# print(f"第五个人的岁数是{n}岁")
4、验证哥德巴赫猜想:任意一个大于2的偶数都可以表示成2个素数之和。编写一个函数isGDBH(n)将传入的6~100之间的偶数表示为2个素数之和,结果保存在列表中返回。例如,函数传入参数10,则返回[“10=3+7”, “10=5+5”]。
# 4、验证哥德巴赫猜想:任意一个大于2的偶数都可以表示成2个素数之和。编写一个函数isGDBH(n)将传入的6~100之间的偶数表示为2个素数之和,结果保存在列表中返回。例如,函数传入参数10,则返回[“10=3+7”,
# “10=5+5”]。# 判断是否为素数
def isPrime(n):i = 2while i <= n:if n % i == 0:breaki += 1if n == i:return Truenum = int(input("输入偶数,6~100之间\n"))
if num < 6:print("请输入大于6的偶数!")exit(0)
elif num > 100:print("请输入小于100的偶数!")exit(0)
elif (num % 2) > 0:print("请输入偶数!")exit(0)
i = 1
result = []def isGDBH(n):global iwhile i <= num:i = i + 1if isPrime(i):j = 1while j < num:j = j + 1if isPrime(j) and i <= j: # jif j + i == num:elem = str(num) + '=' + str(i) + '+' + str(j)result.append(elem)isGDBH(num)
print(result)
5、编写实现如下功能:
(1)编写3个函数,分别求三角形、矩形和圆形周长。
(2)使用装饰器对上述3个函数的传入参数进行调用和合法性检查。
# 5、编写实现如下功能:
# (1)编写3个函数,分别求三角形、矩形和圆形周长。
# (2)使用装饰器对上述3个函数的传入参数进行调用和合法性检查。import math# 定义带参数的装饰器
def DECO(Shape):# 定义内部装饰器def deco(func):# 定义内函数def call_func(a, b=0, c=0):if Shape == '三角形':# print('测试')if (a + b > c) & (a + c > b) & (b + c > a):return func(a, b, c)else:return '输入无效'if Shape == '矩形':if (a > 0) & (b > 0):return func(a, b)else:return '输入无效'if Shape == '圆形':if a > 0:return func(a)else:return '输入无效'return call_funcreturn deco# 传递装饰器参数
@DECO('三角形')
def Triangle(a, b, c):return a + b + c@DECO('矩形')
def Cube(a, b):return (a + b) * 2@DECO('圆形')
def Circle(a):return 2 * math.pi * aif __name__ == "__main__":a, b, c = map(int, input('输入三角形三边').split(" "))print(Triangle(a, b, c))a, b = map(int, input('输入矩形两边').split(" "))print(Cube(a, b))a = int(input('输入圆半径'))print(Circle(a))
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
