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

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


一、实验目的 1. 掌握函数定义和调用的用法。


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


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


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


5. 理解变量作用域。


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


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



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


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

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


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

3. 编写函数,从键盘输入一个整数,判断其是否为完全数。


所谓完全数,是指这样的数,该数的各因子(除该数本身外)之和正好等于该数本身,例如:6=1+2+3,28=1+2+4+7+14。


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)

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)
num = int(input("请输入参数n:"))
print("函数H(n)小于等于参数n的所有值为:")
for i in range(num):
    print(H(i), end=',')
print(H(num))

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

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


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

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


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

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


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

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


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

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


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


三、实验小结

本周的题目类型基本都是函数相关的,虽然题目的难度属于初中级,但是亲自做的时候还是感到不是特别流畅,对python中的许多语法还是无法做到自如地运用。


比如lamda函数的使用实际上是可以更灵活的,但我自身只了解一些基础的用法,使用得很牵强,之后应多去了解一下各种语法的使用技巧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存