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

iPod Game Guesser排行榜功能报错:TypeError排查求助

解决方案

这个错误的根源是变量名冲突,很容易犯的小疏忽!让我给你拆解清楚:

  1. 你一开始定义了score = str(score),这是一个字符串类型的变量。
  2. 后面在循环处理每行数据时,你又用user, score = row.split(':')重新给score赋值,这时候它变成了一个包含分数的字符串片段(比如" 100\n")。
  3. 最后打印的时候你写了score[user]——这里你调用的是字符串score,而不是你创建的字典scores!字符串只能用整数当索引(比如score[0]取第一个字符),用用户名这种字符串当索引自然会报错。

第一步:修复核心错误

把最后一行的score[user]改成scores[user]就可以直接解决这个报错了。

第二步:优化代码(可选但推荐)

除了修复错误,还有几个小细节可以让你的代码更健壮、更符合Python最佳实践:

  • 使用with语句管理文件,不需要手动调用close(),避免资源泄漏
  • 用strip()处理分割后的内容,去掉多余的空格和换行符
  • 增加异常处理,避免文件中无效行导致程序崩溃

修正后的完整代码:

# 写入用户分数到文件
with open("Score.txt", "a+") as leaderboard:
    # 直接用f-string拼接更简洁
    leaderboard.write(f"{Username} : {score}\n")

# 读取并解析排行榜数据
with open("Score.txt", "r") as leaderboard:
    score_list = leaderboard.readlines()

scores = {}
for row in score_list:
    # 先去掉行首尾的空格和换行符,再分割
    cleaned_row = row.strip()
    if not cleaned_row:  # 跳过空行
        continue
    # 分割用户名和分数
    user_part, score_part = cleaned_row.split(':')
    # 再分别去掉前后空格
    username = user_part.strip()
    try:
        user_score = int(score_part.strip())
        scores[username] = user_score
    except ValueError:
        print(f"警告:跳过无效的分数行 -> {row}")

# 按分数从高到低排序用户
top_users = sorted(scores.keys(), key=lambda name: scores[name], reverse=True)

# 打印排行榜
print("=== 排行榜 ===")
for rank, user in enumerate(top_users, start=1):
    print(f"{rank}. {user} : {scores[user]}")

这样不仅解决了报错,还让你的代码更稳定,输出也更美观~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:08