You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行插入排序时出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:15:39