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

游戏玩家CSV分数文件处理求助:按RawTime排序并打印前5最优成绩

解决CSV玩家数据排序并打印前5名的问题

没问题,我来帮你搞定这个功能!咱们用Python内置的csv模块来处理,比手动拼接字符串更可靠,也能避免很多潜在的bug。

首先先帮你改进一下现有的addtoScoreboard函数——原来的写法有个小问题(忘记给close()加括号了),而且用with语句自动管理文件会更安全,不用手动记着关闭文件:

import csv

def addtoScoreboard(name, time, raw_time):
    # 使用with语句自动处理文件打开/关闭,避免资源泄漏
    with open("scores.csv", "a", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow([name, time, raw_time])

接下来是核心的排序和打印功能,我写了一个get_top_players函数,专门用来读取CSV数据、按RawTime升序排序(也就是最快的成绩在前),然后输出前5名:

def get_top_players(top_n=5):
    players = []
    
    # 读取CSV文件,用DictReader可以直接通过列名访问数据,不用记索引
    with open("scores.csv", "r", encoding="utf-8") as file:
        # 如果你的CSV文件第一行已经是表头(Name,Time,RawTime),可以去掉fieldnames参数
        reader = csv.DictReader(file, fieldnames=["Name", "Time", "RawTime"])
        
        for row in reader:
            # 把RawTime从字符串转成整数,这样才能正确按数值大小排序
            row["RawTime"] = int(row["RawTime"])
            players.append(row)
    
    # 按RawTime从小到大排序(升序)
    sorted_players = sorted(players, key=lambda x: x["RawTime"])
    
    # 取前top_n个玩家
    top_players = sorted_players[:top_n]
    
    # 格式化打印结果,看起来更清晰
    print(f"Top {top_n} Players (Fastest First):")
    print("Name  | Time  | RawTime")
    print("-------------------------")
    for player in top_players:
        # 用格式化字符串对齐输出,让排版更整齐
        print(f"{player['Name']:<6} | {player['Time']} | {player['RawTime']}")

关键细节说明:

  • 用csv.DictReader的好处:可以直接通过row["Name"]、row["RawTime"]这样的列名访问数据,比用索引(比如row[0])更直观,也不容易出错。
  • 转换RawTime为整数:CSV里的数值默认是字符串类型,如果直接排序会按字典序(比如"120"会比"60"靠前),转成整数后才能按真实的时长大小排序。
  • 排序逻辑:sorted函数的key参数指定按RawTime排序,默认是升序,正好符合你要的“从低到高(最快到最慢)”的需求。

测试一下

假设你的CSV文件内容是:

Name,Time,RawTime
Human,02:00,120
Joe,03:00,180
Alex,01:00,60
Jason,05:00,300
Liza,06:00,360
John,07:00,420
Mark,04:00,240

调用get_top_players()后,会输出:

Top 5 Players (Fastest First):
Name  | Time  | RawTime
-------------------------
Alex   | 01:00 | 60
Human  | 02:00 | 120
Joe    | 03:00 | 180
Mark   | 04:00 | 240
Jason  | 05:00 | 300

你可以直接把这两个函数集成到你的游戏代码里,调用addtoScoreboard添加新数据,调用get_top_players()展示排行榜就可以啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:08:56