ChatGPT编辑的python练习题-1


本文来自:想考python二级和python小白学习的肥友专栏欢迎大家一起学习。

链接:传送门
在这里插入图片描述

说明

当今chatGPT的横空出世,更加说明了python在编程界的重要性。今天我们就让这款用python编写的AI自己出一些练习题给我们。
在这里插入图片描述
省略掉以前我们做过的,我把比较不常见的列在下面了。

习题

实现冒泡排序算法

def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(n-i-1):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_lst = bubble_sort(lst)
print("排序后的列表:", sorted_lst)

判断一个字符串是否为有效的括号序列

def is_valid_parentheses(s):
    stack = []
    for c in s:
        if c in "([{":
            stack.append(c)
        elif c in ")]}":
            if len(stack) == 0:
                return False
            elif c == ")" and stack[-1] != "(":
                return False
            elif c == "]" and stack[-1] != "[":
                return False
            elif c == "}" and stack[-1] != "{":
                return False
            else:
                stack.pop()
    if len(stack) == 0:
        return True
    else:
        return False

s = input("输入一个字符串:")
if is_valid_parentheses(s):
    print(s, "是有效的括号序列")
else:
    print(s, "不是有效的括号序列")

实现一个二分查找算法

def binary_search(lst, target):
    left = 0
    right = len(lst) - 1
    while left <= right:
        mid = (left + right) // 2
        if lst[mid] == target:
            return mid
        elif lst[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

lst = [1, 3, 4, 5, 6, 8, 9, 10]
target = int(input("输入要查找的数字:"))
index = binary_search(lst, target)
if index == -1:
    print("未找到数字", target)
else:
    print("数字", target, "的索引是", index)

实现一个逆波兰计算器

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

def eval_rpn(tokens):
    stack = []
    for token in tokens:
        if is_number(token):
            stack.append(float(token))
        else:
            num2 = stack.pop()
            num1 = stack.pop()
            if token == "+":
                stack.append(num1 + num2)
            
            elif token == "-":
                stack.append(num1 - num2)
            elif token == "*":
                stack.append(num1 * num2)
            elif token == "/":
                stack.append(num1 / num2)
    return stack[-1]

tokens = input("输入逆波兰表达式,数字和运算符之间用空格隔开:").split()
result = eval_rpn(tokens)
print("逆波兰表达式的计算结果是:", result)

实现一个插入排序算法

def insertion_sort(lst):
    for i in range(1, len(lst)):
        j = i - 1
        key = lst[i]
        while j >= 0 and lst[j] > key:
            lst[j+1] = lst[j]
            j -= 1
        lst[j+1] = key
    return lst

lst = [5, 2, 4, 6, 1, 3]
print("插入排序前:", lst)
lst = insertion_sort(lst)
print("插入排序后:", lst)

实现一个快速排序算法

def quick_sort(lst, left, right):
    if left < right:
        pivot = partition(lst, left, right)
        quick_sort(lst, left, pivot-1)
        quick_sort(lst, pivot+1, right)

def partition(lst, left, right):
    pivot = lst[right]
    i = left - 1
    for j in range(left, right):
        if lst[j] <= pivot:
            i += 1
            lst[i], lst[j] = lst[j], lst[i]
    lst[i+1], lst[right] = lst[right], lst[i+1]
    return i + 1

lst = [5, 2, 4, 6, 1, 3]
print("快速排序前:", lst)
quick_sort(lst, 0, len(lst)-1)
print("快速排序后:", lst)

实现一个归并排序算法

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result

lst = [5, 2, 4, 6, 1, 3]
print("归并排序前:", lst)
lst = merge_sort(lst)
print("归并排序后:", lst)

实现一个堆排序算法

def heap_sort(lst):
    n = len(lst)
    for i in range(n//2-1, -1, -1):
        heapify(lst, n, i)
    for i in range(n-1, 0, -1):
        lst[i], lst[0] = lst[0], lst[i]
        heapify(lst, i, 0)

def heapify(lst, n, i):
    largest = i
    l = 2*i + 1
    r = 2*i + 2
    if l < n and lst[l] > lst[largest]:
        largest = l
    if r < n and lst[r] > lst[largest]:
        largest = r
    if largest != i:
        lst[i], lst[largest] = lst[largest], lst[i]
        heapify(lst, n, largest)

lst = [5, 2, 4, 6, 1, 3]
print("堆排序前:", lst)
heap_sort(lst)
print("堆排序后:", lst)

实现一个线性查找算法

def linear_search(lst, target):
    for i in range(len(lst)):
        if lst[i] == target:
            return i
    return -1

lst = [1, 2, 3, 4, 5, 6]
target = 4
index = linear_search(lst, target)
if index == -1:
    print("目标元素不存在")
else:
    print("目标元素在列表中的索引是:", index)

特别介绍

📣小白练手专栏,适合刚入手的新人和想考python二级欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个冲刺大厂面试专栏还有算法比赛练习我们一起加油 上岸之路

点击直接资料领取

这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥学

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值