python实验五 函数 源码+详解

  1. 编写函数,接收两个正整数作为参数,返回一个数组,其中第一个元素为最大公约数,第二个元素为最小公倍数。不允许使用math模块的gcd( )函数。
def demo(m, n):  # 自定义demo函数其中包含两个参数m,n
    p = m * n  # 将m与n的乘积赋值给p
    while m != 0:  # 当m!=0时执行循环
        r = n % m  # 将n与m的余数赋值给r
        n, m = m, r  # 将m赋值给n,r赋值给m
    return (n, p // n)  # 返回最大公约数,最小公倍数


print(demo(20, 30))  # 调用自定义demo函数并输出最大公约数,最小公倍数

2.编写函数,接收一个所有元素值互不相等的整数列表 x 和一个整数 n ,要求将值为n的元素作为支点,将列表中所有值小于n的元素全部放到 n 的前面,所有值大于n 的元素放到 n 的后面。

import random  # 导入random模块


def demo(x, n):  # 自定义demo函数其中包含两个参数,x为列表,k为给定值
    i = x.index(n)  # 如果包含子字符串n返回开始的索引值赋值给i
    x[0], x[i] = x[i], x[0]  # 将指定元素于第0个元素交换
    key = x[0]  # 将指定元素赋值给key
    i = 0  # 将0赋值给i
    j = len(x) - 1  # 将列表元素长度-1赋值给j,由于下标从0开始
    while i < j:  # 当i<j时执行循环
        while i < j and x[j] >= key:  # 当i<j并且x[j]不小于给定值key,执行循环
            j -= 1  # j自减1
        x[i] = x[j]  # 将x[j]赋值给x[i]
        while i < j and x[i] <= key:  # 当i<j并且x[j]不大于给定值key,执行循环
            i += 1  # i自增加1
        x[j] = x[i]  # 将x[i]赋值给x[j]
    x[i] = key  # 如果i不小于j,将给定值key赋值给x[i]


x = list(range(1, 10))  # 取1~9九个数字并将其赋值给列表x
random.shuffle(x)  # random.shuffle()函数随机打乱数组顺序
print(x)  # 输出列表x
demo(x, 7)  # 调用函数demo
print(x)  # 输出操作后列表

  1. 编写函数,接收包含20个整数的列表lst和一个整数k作为参数,返回新列表。处理规则为:将列表lst中下标k 之前的元素逆序,下标k之后的元素逆序,然后将整个列表lst中的所有元素逆序。
def demo(lst, k):  # 自定义demo函数其中包含两个参数,lst为列表,k为给定值
    x = lst[:]  # 将列表lst赋值给列表x
    x[:k] = reversed(x[:k])  # 对定值k前面的元素反转逆序
    x[k:] = reversed(x[k:])  # 对定值k后面的元素反转逆序
    x.reverse()  # 将列表所有元素逆序
    return x  # 返回列表x


lst = list(range(1, 21))  # 取20个数
print('操作前:')  # 注释
print(lst)  # 输出操作前列表
print('操作后:')  # 注释
print(demo(lst, 6))  # 输出操作后列表

4.编写函数,计算字符串匹配的准确率。此算法可用在打字练习程序中,用来测试用户输入字符串的准确率。

def rate(origin, userInput):  # 自定义函数
    if not (isinstance(origin, str) and isinstance(userInput, str)):  # 用isinstance() 函数来判断origin,userInput是否是字符串类型
        print("这两个参数必须是字符串")  # 不是字符串类型时提示
        return  # 结束返回
    if len(origin) < len(userInput):  # 判断用户输入长度是否大于原始长度
        print('抱歉,第二个参数字符串应较短')  # 如果户输入长度是大于原始长度,提升信息
        return  # 结束返回
    right = 0  # 计数器,用来记录相同字符数
    for origin_char, user_char in zip(origin, userInput):  # 遍历origin,userInput两个字符串,并将相应位置的字符打包为元组放在列表中
        if origin_char == user_char:  # 如果对应位置字符相同
            right += 1  # 计数器加1
    return right / len(origin)  # 返回相同字数除以原始长度,即准确率


origin = 'Shandong Institute of Business and Technology'  # 输入原始字符串
# userInput = 'Shandong Institute of Business and Technology'
userInput = 'ShanDong institute of business and technolog'  # 用户输入字符串
print(rate(origin, userInput))  # 输出结果


版权声明:本文为m0_55439140原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。