难题练习 — 程序改错题
练习说明
- 共 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**********
|