如何修复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.")
原代码的问题解析
字典赋值覆盖而非累加
原代码中d[words[0]] = words[1]会直接用新的数值覆盖旧值,而且没有把字符串类型的人数转成整数——就算想累加,也会变成字符串拼接(比如"1000"+"1200"会得到"10001200")。修复时先把人数转成整数,再判断键是否存在来做累加操作。总人数统计逻辑错误
原代码里的a是每个文件内的临时列表,循环结束后只保留了最后一个文件的数值,而且没有把所有文件的所有数值加起来。修复后直接在遍历每一行时就把当前人数加到total_attendees变量里,逻辑更清晰准确。文件资源管理不规范
原代码用open()打开文件后没有手动关闭,使用with语句可以让Python在代码块结束后自动关闭文件,避免资源泄漏问题。行处理不严谨
原代码只替换了逗号为空格再分割,没有处理行尾的换行符,可能导致分割后出现多余的空白字符。用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

