算法题Leaderboard类返回值类型错误求助:TypeError问题
算法题问题解决思路
问题梳理
用字典存储玩家分数实现排行榜功能时,遇到两个问题:
top方法返回[(1, 73)]时触发类型错误:TypeError: [(1, 73)] is not valid value for the expected return type integer- 需要将输出格式从元组列表转换为列表的列表(比如
[[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]]
错误原因
- 返回类型注解不匹配:
top方法定义的返回类型是int,但实际返回了列表,导致类型校验失败 - 格式不符合要求:排序后得到的是元组列表,而题目需要列表的列表
- 语法错误:测试代码被错误嵌套在
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
相关产品推荐
相关产品推荐

