如何让Python的print_leaderboard函数输出Name: Score格式的排行榜?
解决Python排行榜输出格式问题
你当前的scoreboard列表里存储的是(score, name)格式的元组,直接打印会输出元组结构。要实现Name: Score的输出格式,只需要拆分元组元素并按指定格式拼接即可,下面提供两种方案:
方案一:直接修改打印逻辑(基于现有元组存储)
修改Scoreboard类的print_leaderboard方法,遍历前3个排序后的条目,拆分元组并格式化输出:
def print_leaderboard(self): self.scoreboard.sort(reverse=True) # 遍历排行榜前三名 for entry in self.scoreboard[:3]: # 元组索引1是姓名,索引0是分数 print(f"{entry[1]}: {entry[0]}")
运行后输出会变成:
Bob: 12103 Charlie: 8762 Alice: 7821
方案二:利用已定义的ScoreEntry类(更符合面向对象设计)
你已经定义了ScoreEntry类但未实际使用,改用这个类存储分数条目会让代码结构更清晰:
- 修改
add_score方法,创建ScoreEntry实例并添加到列表:
def add_score(self, name, score): new_entry = ScoreEntry(name, score) self.scoreboard.append(new_entry)
- 修改
print_leaderboard方法,按分数排序后格式化输出:
def print_leaderboard(self): # 按分数降序排序,通过get_score方法获取分数作为排序依据 self.scoreboard.sort(key=lambda entry: entry.get_score(), reverse=True) for entry in self.scoreboard[:3]: print(f"{entry.name}: {entry.score}")
这个方案让代码的面向对象特性更突出,后续扩展功能也更方便。
内容的提问来源于stack exchange,提问作者Nicko Toumbas
相关产品推荐
相关产品推荐

