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

如何修复print_leaderboard()函数以正确打印排行榜前3名?

问题修复:分数榜无法正确显示前3名及AttributeError错误

原代码核心问题:

  • add_score方法未创建ScoreEntry实例,而是生成嵌套列表结构,导致后续数据处理混乱
  • print_leaderboard作为实例方法却未定义self参数,且直接引用未定义的scoreboard变量,而非实例的self.scoreboard属性
  • 排序时未指定按分数排序的规则,ScoreEntry对象默认无法直接比较大小
  • 切片范围错误,[0:2]仅能取前2条数据,取前3名需用[0:3]

修复后的完整代码:

class ScoreEntry:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    # 自定义打印格式,方便查看数据
    def __repr__(self):
        return f"{self.name}: {self.score}"

class Scoreboard:
    def __init__(self):
        self.scoreboard = []

    def add_score(self, name, score):
        # 创建标准的ScoreEntry实例,而非嵌套列表
        new_entry = ScoreEntry(name, score)
        self.scoreboard.append(new_entry)
        return new_entry
    
    def print_leaderboard(self):
        # 按分数降序排序,指定排序依据为score属性
        sorted_scores = sorted(self.scoreboard, key=lambda entry: entry.score, reverse=True)
        # 取前3名并打印
        print("Top 3 Leaderboard:")
        for rank, entry in enumerate(sorted_scores[:3], start=1):
            print(f"{rank}. {entry.name}: {entry.score}")

# 测试代码
scoreboard = Scoreboard()
scoreboard.add_score('Alice', 7821)
scoreboard.add_score('Bob', 12103)
scoreboard.add_score('Charlie', 8762)
scoreboard.add_score('Denise', 6753)
# 通过实例调用方法,而非直接调用类方法
scoreboard.print_leaderboard()

修复说明:

  1. 统一数据结构:add_score方法创建ScoreEntry实例,确保所有分数条目格式一致,便于排序和访问
  2. 修正方法定义:给print_leaderboard添加self参数,通过self.scoreboard访问实例的分数列表;使用sorted()函数并指定key参数,按分数降序排序
  3. 优化输出逻辑:通过循环和序号打印前3名,输出更直观清晰
  4. 修正调用方式:通过实例对象调用print_leaderboard方法,符合面向对象的调用规范

内容的提问来源于stack exchange,提问作者Nicko Toumbas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:22