跳转至

难题练习 — 程序改错题

练习说明

  • 共 8 道程序改错题,难度高于模拟考试
  • 每题包含 2~4 处错误,标记为 #**********begin**********#**********end**********
  • 建议每题用时 5~10 分钟

🔧 程序改错题

第1题:插入排序

题目: 实现插入排序算法,将列表升序排列。

Python
def insertion_sort(lst):
    for i in range(1, len(lst)):
        key = lst[i]
        j = i - 1
        #**********begin1**********
        while j >= 0 and lst[j] < key:
        #**********end1**********
            lst[j + 1] = lst[j]
            j = j - 1
        #**********begin2**********
        lst[j] = key
        #**********end2**********
    return lst

nums = [12, 11, 13, 5, 6]
print(insertion_sort(nums))
第2题:合并两个有序列表

题目: 将两个升序列表合并为一个新的升序列表。

Python
def merge_lists(list1, list2):
    result = []
    i = j = 0
    #**********begin1**********
    while i < len(list1) and j < len(list2):
    #**********end1**********
        #**********begin2**********
        if list1[i] >= list2[j]:
            result.append(list1[i])
            i += 1
        else:
            result.append(list2[j])
            j += 1
        #**********end2**********
    #**********begin3**********
    result += list1[j:]
    result += list2[i:]
    #**********end3**********
    return result

a = [1, 3, 5, 7]
b = [2, 4, 6, 8, 10]
print(merge_lists(a, b))
第3题:学生成绩排序

题目: 定义学生类,按成绩从高到低排序并输出。

Python
class Student:
    #**********begin1**********
    def _init_(self, name, score):
    #**********end1**********
        self.name = name
        self.score = score

    def __str__(self):
        return f"{self.name}: {self.score}"

students = [
    Student("张三", 85),
    Student("李四", 92),
    Student("王五", 78),
]
#**********begin2**********
students.sort(key=lambda s: s.score)
#**********end2**********
for s in students:
    #**********begin3**********
    print(s.name + ": " + s.score)
    #**********end3**********
第4题:凯撒密码

题目: 实现凯撒密码加密,将字符串中每个字母向后移动n位。

Python
def caesar_encrypt(text, n):
    result = ""
    for ch in text:
        if ch.isalpha():
            #**********begin1**********
            if ch.isupper():
                new_ch = chr((ord(ch) - ord('A') + n) % 26 + ord('A'))
            else:
                new_ch = chr((ord(ch) - ord('a') + n) % 26 + ord('a'))
            #**********end1**********
            result += new_ch
        else:
            #**********begin2**********
            result += ch + 1
            #**********end2**********
    return result

text = "Hello, World!"
#**********begin3**********
print(caesar_encrypt(text))
#**********end3**********
第5题:链表节点删除

题目: 实现简单的链表操作:创建链表、删除指定值的节点。

Python
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def delete(self, value):
        #**********begin1**********
        if self.head is None:
            return
        if self.head.data == value:
            self.head = None
            return
        #**********end1**********
        current = self.head
        #**********begin2**********
        while current.next:
            if current.next.data == value:
                current.next = current.next.next.next
                return
            current = current.next
        #**********end2**********

    def display(self):
        current = self.head
        #**********begin3**********
        while current:
            print(current.data, end="->")
            current = current.data
        print("None")
        #**********end3**********

ll = LinkedList()
for val in [1, 2, 3, 4, 5]:
    ll.append(val)
ll.delete(3)
ll.display()  # 应输出: 1->2->4->5->None
第6题:CSV数据处理

题目: 读取CSV格式数据,计算每名学生的平均成绩。

Python
def process_grades(csv_text):
    lines = csv_text.strip().split("\n")
    #**********begin1**********
    header = lines[0]
    #**********end1**********
    for line in lines[1:]:
        parts = line.split(",")
        name = parts[0]
        #**********begin2**********
        scores = parts[1:]
        avg = sum(scores) / len(scores)
        #**********end2**********
        #**********begin3**********
        print(name + "的平均成绩为:" + avg)
        #**********end3**********

csv_data = """姓名,语文,数学,英语
张三,85,92,78
李四,90,88,95
王五,72,80,76"""
process_grades(csv_data)
第7题:递归反转列表

题目: 使用递归方法反转列表。

Python
def reverse_list(lst):
    #**********begin1**********
    if len(lst) == 0:
        return lst
    #**********end1**********
    #**********begin2**********
    return reverse_list(lst[1:]) + lst[0]
    #**********end2**********

#**********begin3**********
print(reverse_list(1, 2, 3, 4, 5))
#**********end3**********
第8题:字典嵌套操作

题目: 统计班级中每个学生成绩的最高分和最低分。

Python
def analyze_scores(students_scores):
    result = {}
    for name, scores in students_scores.items():
        #**********begin1**********
        max_score = scores[0]
        min_score = scores[0]
        for score in scores:
            if score > max_score:
                max_score == score
            if score < min_score:
                min_score == score
        #**********end1**********
        #**********begin2**********
        result[name] = (min_score, max_score)
        #**********end2**********
    return result

data = {
    "张三": [85, 92, 78, 90],
    "李四": [88, 76, 95, 82],
    "王五": [72, 80, 76, 88]
}
#**********begin3**********
for name, (high, low) in analyze_scores(data).items():
    print(f"{name}: 最高{high}, 最低{low}")
#**********end3**********