运行插入排序时出现Attribute Error问题求助
问题分析与解决办法
你的Attribute Error核心原因是**scores数组里的元素没有.Score这个属性**,要么是你存储数据的结构和代码里的访问方式不匹配,要么是部分元素的初始化有问题。下面给你几个具体的排查和修复方向:
1. 匹配数据结构与访问方式
先明确你scores里存的是什么类型的数据,对应调整代码的访问方式:
- 如果是元组列表(比如
[(100, 'A'), (80, 'B')]):不能用.Score,得用索引取分数,修改后的插入排序代码:
def insertion_sort(scores): for i in range(1, len(scores)): current_score, current_initials = scores[i] j = i - 1 # 用索引[0]访问分数 while j >= 0 and scores[j][0] > current_score: scores[j + 1] = scores[j] j -= 1 scores[j + 1] = (current_score, current_initials) return scores
- 如果是字典列表(比如
[{'score': 95, 'initials': 'C'}, ...]):要改用键访问,代码改成:
def insertion_sort(scores): for i in range(1, len(scores)): current_entry = scores[i] j = i - 1 # 用键'score'访问分数 while j >= 0 and scores[j]['score'] > current_entry['score']: scores[j + 1] = scores[j] j -= 1 scores[j + 1] = current_entry return scores
2. 检查自定义类的初始化(如果用了类实例)
如果你是用自定义类来存分数和首字母,必须确保两点:
- 类定义里确实有
Score属性(注意大小写,你代码里用的是大写S):
class ScoreRecord: def __init__(self, score, initials): self.Score = score # 和代码里的访问名严格一致 self.Initials = initials
- 添加到
scores里的每个元素都是这个类的实例,比如:
# 正确的添加方式 scores.append(ScoreRecord(75, 'D')) # 错误方式(直接存元组/字典)会触发Attribute Error scores.append((75, 'D'))
3. 优化前三高分的判断逻辑
排序完成后,判断用户是否进入前三的示例逻辑:
# 假设用户新成绩是90,首字母是X user_score = 90 user_initials = 'X' # 插入新记录并重新排序 scores.append((user_score, user_initials)) sorted_scores = insertion_sort(scores) # 判断是否进前三 if len(sorted_scores) <= 3 or sorted_scores[2][0] <= user_score: print("恭喜进入前三高分!") else: print("未进入前三高分")
内容的提问来源于stack exchange,提问作者Adagio
相关产品推荐
相关产品推荐

