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

如何修复Python代码实现多日运动记录中重复项目的人数累加与统计?

修复你的运动项目人数统计代码

你的代码主要有两个核心问题:重复项目的人数没有累加而是被覆盖,以及总人数统计逻辑错误。下面是修复后的完整代码,我会逐一解释修正点:

days = int(input("How many days of records do you have? "))
activity_counts = {}
total_attendees = 0

for day_num in range(1, days + 1):
    filename = f'day{day_num}.txt'
    # 使用with语句自动管理文件关闭,避免资源泄漏
    with open(filename, 'r') as f:
        for line in f:
            # 去除行首尾的空白字符(包括换行符),再按逗号分割
            activity, count_str = line.strip().split(',')
            count = int(count_str)
            
            # 累加相同运动项目的人数:如果键已存在就加,否则初始化为当前数值
            if activity in activity_counts:
                activity_counts[activity] += count
            else:
                activity_counts[activity] = count
            
            # 累计总参与人数
            total_attendees += count

# 输出每个项目的总人数
for activity, total in activity_counts.items():
    print(f"{activity}: {total}")

# 输出总人数
print(f"In total: {total_attendees} attendees.")

原代码的问题解析

  1. 字典赋值覆盖而非累加
    原代码中d[words[0]] = words[1]会直接用新的数值覆盖旧值,而且没有把字符串类型的人数转成整数——就算想累加,也会变成字符串拼接(比如"1000"+"1200"会得到"10001200")。修复时先把人数转成整数,再判断键是否存在来做累加操作。

  2. 总人数统计逻辑错误
    原代码里的a是每个文件内的临时列表,循环结束后只保留了最后一个文件的数值,而且没有把所有文件的所有数值加起来。修复后直接在遍历每一行时就把当前人数加到total_attendees变量里,逻辑更清晰准确。

  3. 文件资源管理不规范
    原代码用open()打开文件后没有手动关闭,使用with语句可以让Python在代码块结束后自动关闭文件,避免资源泄漏问题。

  4. 行处理不严谨
    原代码只替换了逗号为空格再分割,没有处理行尾的换行符,可能导致分割后出现多余的空白字符。用line.strip()先去除首尾空白再分割更可靠。

测试你的输入数据后,这个代码会输出你预期的结果:

swimming: 2600
fencing: 300
athletics: 600
gymnastics: 2400
tennis: 1600
diving: 1000
rugby: 1500
handball: 500
hockey: 2300
trampoline: 200
In total: 13000 attendees.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:15:59