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 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))

你可能感兴趣的:(python,开发语言)