(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 1
else:
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'] += 1
elif i.isalpha():
dic['alpha'] += 1
elif i.isspace():
dic['space'] += 1
else:
dic['other'] += 1
return dic
print(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 10
else:
return func(n - 1) + 2
print(f"第五个人的岁数为{func(5)}岁")
print('非递归方法', end=' ')
def func1(n):
if n == 1:
return 10
else:
return 10 + (n - 1) * 2
print("第五个人的岁数是:", 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 = 2
while i <= n:
if n % i == 0:
break
i += 1
if n == i:
return True
num = 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 i
while i <= num:
i = i + 1
if isPrime(i):
j = 1
while j < num:
j = j + 1
if isPrime(j) and i <= j: # j
if 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_func
return 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 * a
if __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))