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

Python编程求助:如何计算参赛者的最佳/最差成绩及平均值?

解决Race Results文件处理的问题

核心问题分析

你遇到的主要问题是:

  1. Python字符串没有isfloat()方法,导致判断成绩的逻辑失效
  2. 没有正确拆分姓名(前两个元素)和后续的10个成绩

下面是分步的解决方案:


1. 正确加载并拆分数据

根据题目要求,每行前两个元素是姓名,剩下10个是成绩,直接按索引拆分最稳妥,无需复杂的类型判断:

# 初始化存储所有参赛者数据的列表
runners = []

with open("Race_results.txt") as fh:
    for line in fh:
        # 去除首尾空白并按空格拆分每行内容
        line_parts = line.strip().split()
        # 拼接前两个元素为姓名
        full_name = " ".join(line_parts[:2])
        # 剩余元素转为浮点数类型的成绩列表
        race_times = [float(part) for part in line_parts[2:]]
        # 将当前参赛者数据存入字典,再加入总列表
        runners.append({
            "name": full_name,
            "times": race_times
        })

如果担心姓名可能包含更多部分(但题目明确是两位),可以用类型判断来拆分:

def is_numeric(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

runners = []
with open("Race_results.txt") as fh:
    for line in fh:
        parts = line.strip().split()
        name_parts = []
        times = []
        for part in parts:
            if is_numeric(part):
                times.append(float(part))
            else:
                name_parts.append(part)
        full_name = " ".join(name_parts)
        runners.append({"name": full_name, "times": times})

2. 计算最佳、最差、平均成绩

利用Python内置的min()、max()、sum()函数快速计算:

for runner in runners:
    times = runner["times"]
    # 赛跑成绩越短越好,最佳成绩取最小值
    runner["best_time"] = min(times)
    # 最差成绩取最大值
    runner["worst_time"] = max(times)
    # 平均成绩保留两位小数
    runner["avg_time"] = round(sum(times) / len(times), 2)

3. 成绩按从优到劣排序

直接对成绩列表升序排序(时间越短越靠前):

for runner in runners:
    runner["sorted_times"] = sorted(runner["times"])

4. 格式输出示例

假设需要格式化输出参赛者的所有统计信息:

for idx, runner in enumerate(runners, 1):
    print(f"第{idx}位参赛者:{runner['name']}")
    print(f"最佳成绩:{runner['best_time']}s")
    print(f"最差成绩:{runner['worst_time']}s")
    print(f"平均成绩:{runner['avg_time']}s")
    print(f"成绩排序(从优到劣):{', '.join(map(str, runner['sorted_times']))}")
    print("-" * 50)

你之前代码的问题修正

  • word.isfloat():Python字符串没有这个方法,必须通过异常捕获或自定义函数判断数值类型
  • 拆分逻辑错误:没有利用题目给出的"前两位是姓名"的规则,反而用了复杂的判断,增加了出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:40:32