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

算法题Leaderboard类返回值类型错误求助:TypeError问题

算法题问题解决思路

问题梳理

用字典存储玩家分数实现排行榜功能时,遇到两个问题:

  1. top方法返回[(1, 73)]时触发类型错误:TypeError: [(1, 73)] is not valid value for the expected return type integer
  2. 需要将输出格式从元组列表转换为列表的列表(比如[[1,73]])

测试输入(中文翻译):
调用序列:["Leaderboard","addScore","addScore","addScore","addScore","addScore","top","reset","reset","addScore","top"]
对应参数:[[],[1,73],[2,56],[3,39],[4,51],[5,4],[1],[1],[2],[2,51],[3]]

错误原因

  1. 返回类型注解不匹配:top方法定义的返回类型是int,但实际返回了列表,导致类型校验失败
  2. 格式不符合要求:排序后得到的是元组列表,而题目需要列表的列表
  3. 语法错误:测试代码被错误嵌套在reset方法内部,for循环缺少缩进

修复方案及代码

关键修改点:

  • 修改top方法的返回类型注解为list
  • 将排序后的元组转换为列表,生成目标格式的结果
  • 把测试代码移出类定义,修正缩进问题
  • 移除reset方法中多余的print语句,增加玩家存在性判断避免报错

修复后的代码:

class Leaderboard:
    def __init__(self):
        self.players = {}
    
    def addScore(self, playerId: int, score: int) -> None:
        if playerId not in self.players:
            self.players[playerId] = score
        else:
            self.players[playerId] += score

    def top(self, K: int) -> list:
        # 按分数降序排序,取前K项并转换为列表的列表
        sorted_items = sorted(self.players.items(), key=lambda x: x[1], reverse=True)
        return [list(item) for item in sorted_items[:K]]

    def reset(self, playerId: int) -> None:
        if playerId in self.players:
            del self.players[playerId]

# 测试代码移到类外部
if __name__ == "__main__":
    obj = Leaderboard()
    add_score = [[1,73],[2,56],[3,39],[1,7],[4,51],[5,4]]
    
    for item in add_score:
        obj.addScore(item[0], item[1])
    
    print(obj.top(1))  # 输出: [[1, 80]](1号玩家总分73+7)
    obj.reset(4)
    print(obj.players)  # 输出: {1: 80, 2: 56, 3: 39, 5: 4}

验证说明

  • 调用top(1)时返回[[1, 80]],完全符合格式要求且类型正确
  • 类型错误的根源是返回类型注解与实际返回值不匹配,修正注解后即可解决
  • 增加reset方法的存在性判断,避免删除不存在的玩家时抛出KeyError

内容的提问来源于stack exchange,提问作者Mike Curtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:43:30