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

Python实现人员-分数映射、总分计算及升序排序问题求助

高尔夫球员分数统计与排名实现方案

需求说明

读取包含球员姓名和多轮分数的文件golf.txt,完成以下操作:

  1. 计算每位球员的总分并关联对应姓名
  2. 按总分升序排序(最低分排第一,最高分排最后)
  3. 在终端输出排名(FIRST、SECOND、THIRD、LAST)

输入示例

Bob Jones:4,6,3,3,4,3,5,5,4,4,3,3,2,3,4,3,4,4
Ted Smith:3,3,3,3,4,3,5,5,4,3,3,3,2,3,4,3,4,4
Taylor Martin:4,4,3,3,4,3,5,6,4,4,4,3,2,3,5,3,5,4

现有代码的问题

  • 遍历文件行时直接覆盖name和score变量,仅保留最后一行数据,丢失前面所有球员信息
  • 计算总分时未将字符串类型的分数转为整数,直接执行加法会触发类型错误
  • 未建立姓名与总分的关联存储,无法进行排序和排名
  • 仅实现了单个球员的分数累加过程,未完成所有球员的统计

修正后的代码

# 存储球员姓名与对应总分的字典
player_totals = {}

with open('golf.txt', 'r') as f:
    for line in f:
        # 去除换行符,跳过空行
        line = line.strip()
        if not line:
            continue
        # 分割姓名和分数段
        name, score_str = line.split(':')
        # 将分数字符串转为整数列表并计算总分
        scores = list(map(int, score_str.split(',')))
        total = sum(scores)
        # 存入字典
        player_totals[name] = total

# 按总分升序排序,得到(姓名, 总分)的有序列表
sorted_players = sorted(player_totals.items(), key=lambda x: x[1])

# 输出排名结果
if sorted_players:
    print(f"FIRST:{sorted_players[0][0]}")
    if len(sorted_players) >= 2:
        print(f"SECOND:{sorted_players[1][0]}")
    if len(sorted_players) >= 3:
        print(f"THIRD:{sorted_players[2][0]}")
    print(f"LAST:{sorted_players[-1][0]}")

代码说明

  1. 数据存储:用字典player_totals存储每个球员的姓名和总分,避免遍历过程中数据被覆盖
  2. 分数处理:通过map(int, ...)将字符串分数转为整数,再用sum()直接计算总分,简洁高效
  3. 排序逻辑:使用sorted()结合lambda表达式,按总分升序排列球员列表
  4. 排名输出:根据排序后的列表长度,灵活输出FIRST、SECOND、THIRD和LAST,兼容球员数量不足4的情况

测试输出

针对输入示例,执行代码后会输出:

FIRST:Ted Smith
SECOND:Taylor Martin
THIRD:Bob Jones
LAST:Bob Jones

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:15:32