python学习实验报告(第四周)

一、实验目的

1. 掌握函数定义和调用的用法。

2. 掌握递归函数的执行过程。

3. 掌握位置参数、关键参数、默认值参数与长度可变参数的用法。

4. 理解函数调用时参数传递的序列解包用法。

5. 理解变量作用域。

6. 掌握lambda表达式的定义与用法。

7. 掌握生成器函数工作原理。

二、实验内容及结果

1. 编写函数,实现根据键盘输入的长、宽、高之值计算长方体体积。

def main():
    value = input("请输入长方体的长、宽、高(空格分隔):")
    length, width, height = [eval(i) for i in value.split(" ")]
    volume = length * width * height
    print("长方体的体积为%.2f" % volume)

main()

图片描述

2. 编写函数,使用递归函数f(n)实现斐波那契数列中小于等于参数n的所有值。

def f(n):
    if n == 1 or n == 2:
        return 1
    return f(n - 1) + f(n - 2)
    
def main():
    num = int(input("请输入斐波那契数列的阶数:"))
    print("斐波那契数列中小于等于参数{}的所有值:".format(num), end="")
    for i in range(num - 1):
        print(f(i + 1), end=",")
    print(f(num))

main()

图片描述

3. 编写函数,从键盘输入一个整数,判断其是否为完全数。所谓完全数,是指这样的数,该数的各因子(除该数本身外)之和正好等于该数本身,例如:6=1+2+3,28=1+2+4+7+14。

def main():
    num = int(input("请输入一个整数:"))
    total = 0
    for i in range(1, int(num / 2) + 1):
        if num % i == 0:
            total += i
    if total == num:
        print("%d是一个完全数" % num)
    else:
        print("%d不是一个完全数" % num)

main()

图片描述

图片描述

4. 编写函数,从键盘输入参数n,使用递归函数H(n)实现下列特征方程中小于等于参数n的所有值。 H(0)=0; H(1)=1; H(2)=2; H(n)= H(n-1)+9H(n-2)-9H(n-3)

def H(n):
    if 0 <= n < 3:
        return n
    else:
        return H(n - 1) + 9 * H(n - 2) - 9 * H(n - 3)

def main():
    num = int(input("请输入参数n:"))
    print("函数H(n)小于等于参数n的所有值为:")
    for i in range(num):
        print(H(i), end=',')
    print(H(num))
    
main()

python学习实验报告(第四周)_第1张图片

5. 编写函数,实现折半查找。

def B_search(array, target):
    array.sort()
    low = 0
    height = len(array) - 1
    while low <= height:
        mid = (low + height) // 2
        if target == array[mid]:
            return mid
        elif target < array[mid]:
            height = mid - 1
        else:
            low = mid + 1
    return False

def main():
    my_array = [1, 3, 5, 7, 9, 11, 13]
    num = eval(input("请输入要查找的数:"))
    result = B_search(my_array, num)
    if result:
        print("要查找的数在数组中的下标为:", result)
    else:
        print("数组中不存在要查找的数")
    
main()

图片描述

图片描述

6. 编写函数,从键盘输入参数x和n,计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值。

def main():
    x = input("请输入参数x:")
    n = eval(input("请输入参数n:"))
    exp = x
    for i in range(2, n + 1):
        exp += ' + ' + x * i
    print(exp + " =", eval(exp))

main()

python学习实验报告(第四周)_第2张图片

7. 编写函数,从键盘输入参数n,计算并显示表达式1 +1/2 –1/3 + 1/4 –1/5 + 1/6+… +(-1)n/n 的前n项之和。

def main():
    n = eval(input("请输入参数n:"))
    exp = "1"
    for i in range(2, n + 1):
        if i % 2 == 0:
            exp += " + "
        else:
            exp += " - "
        exp += "1/" + str(i)
    print(exp + " =", round(eval(exp), 5))

main()

图片描述

8. 编写函数,从键盘输入一字符串,判断该字符串是否为会回文,所谓回文是指,从前向后读和从后向前读是一样的。

def main():
    s = input("请输入一串字符串:")
    is_palindrome = lambda string: string == string[::-1]
    if is_palindrome(s):
        print(s + "是回文")
    else:
        print(s + "不是回文")
        
main()

图片描述

图片描述

9. 编写函数,从键盘输入一字符串,把其中的各个字符颠倒,标点符号不颠倒,例如,‘I enjoy reading!’,经过函数调用后变为‘gnidaer yojne I’。

import re

def main():
    s = input("请输入一串字符串:")
    punctuation = '!,;:?"\'、,.'
    s = re.sub(r'[{}]+'.format(punctuation), '', s)
    s_inverse = s[::-1]
    print("颠倒后的字符串为:", s_inverse)

main()

图片描述

10. 佩奇去超市购买54元巧克力和53元果冻,货币面值有20、10、2、1元,按付款货币数量最少原则,佩奇需要付给超市多少数量的货币,编写函数实现该算法。

def main():
    price = 54 + 53
    money = [20, 10, 2, 1]
    num = 0
    for m in money:
        if price >= m:
            num += price // m
            print("{}张{}元".format(price // m, m))
            price %= m
        else:
            continue
    print("最少需要{}张货币".format(num))

main()

python学习实验报告(第四周)_第3张图片

三、实验小结

本周的题目类型基本都是函数相关的,虽然题目的难度属于初中级,但是亲自做的时候还是感到不是特别流畅,对python中的许多语法还是无法做到自如地运用。比如lamda函数的使用实际上是可以更灵活的,但我自身只了解一些基础的用法,使用得很牵强,之后应多去了解一下各种语法的使用技巧。

你可能感兴趣的:(Python学习实验报告,python)