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

如何实现输入跑者姓名计算并打印其马拉松平均成绩

问题分析与修复

你的代码存在几个关键问题,导致无法正确计算并输出指定跑者的平均成绩:

  • 计算平均时错误使用了sum(times),times是整个CSV数据集的行对象列表,并非当前跑者的三个成绩数值,根本无法直接求和。
  • 找到匹配的跑者后未终止循环,若数据中存在同名跑者,会重复输出结果。
  • 未处理找不到指定姓名的场景,用户输入不存在的名字时,程序没有任何反馈。

修正后的代码

import csv

def racerAvg(times):
    name = input("Please enter racer's name: ")
    found = False
    for row in times:
        # 忽略大小写匹配(可选,提升用户输入容错性)
        if name.strip().lower() == row['name'].strip().lower():
            # 提取当前跑者的三项成绩并转为整数
            race_times = [int(row['boston']), int(row['chicago']), int(row['NY'])]
            avg_time = sum(race_times) / len(race_times)
            # 格式化输出,保留两位小数更直观
            print(f"Average time for {name}: {avg_time:.2f}")
            found = True
            # 找到匹配项后跳出循环,避免重复处理
            break
    # 未找到对应跑者时给出提示
    if not found:
        print(f"Racer {name} not found in the dataset.")

# 示例:读取CSV文件并调用函数
if __name__ == "__main__":
    with open('marathon_data.csv', mode='r') as file:
        # 用DictReader将每行转为字典,方便按列名取值
        reader = csv.DictReader(file)
        # 把读取到的行转为列表传入函数
        racerAvg(list(reader))

关键修改说明

  • 用race_times列表存储当前跑者的三项成绩,通过sum(race_times)计算总和后除以成绩数量得到平均值,这才是正确的计算逻辑。
  • 添加found标记和循环后的判断,处理找不到目标跑者的情况。
  • 加入strip().lower()实现大小写不敏感匹配,避免用户输入大小写不一致导致的匹配失败。
  • 找到匹配项后用break终止循环,避免重复输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:05:30