Python从文本文件计算每年平均值的代码报错求助
问题排查与解决方案
让我来帮你搞定这个年份平均值计算的需求,先拆解下你遇到的报错原因:
1. 数据解析逻辑错误
你的原始文本是一行内包含多组年份+数值对(比如1969 324.000 1970 330.190 ...),但原代码里用year, num = line.split()试图把整行拆成两个变量——这必然会触发ValueError: too many values to unpack (expected 2),因为split()后得到的是一个包含所有元素的长列表,没法直接拆成两个变量。
2. 代码不完整
你提供的In[3]片段没写完:sorted(result....)缺少排序参数,也没有后续计算平均值的逻辑,这也会导致语法或运行错误。
修正后的完整可运行代码
下面是调整后的代码,我会逐段解释逻辑:
# 初始化字典,用来存储每个年份对应的所有数值 year_values = {} # 读取文件并解析数据 with open('filename.txt', 'r') as f: for line in f: # 把整行内容拆成单个元素的列表,比如['1969', '324.000', '1970', ...] all_items = line.strip().split() # 按步长2遍历,每次取一组年份和数值 for idx in range(0, len(all_items), 2): year = int(all_items[idx]) value = float(all_items[idx+1]) # 将数值添加到对应年份的列表中 if year in year_values: year_values[year].append(value) else: year_values[year] = [value] # 按年份排序,计算并输出平均值 print("年份\t平均值") for year in sorted(year_values.keys()): values = year_values[year] avg = sum(values) / len(values) # 格式化输出,保留3位小数 print(f"{year}\t{avg:.3f}")
代码细节说明:
- 数据解析:用
range(0, len(all_items), 2)实现按每两个元素一组遍历,完美适配你一行多组数据的格式,避免了拆包错误。 - 字典构建:用
if year in year_values的判断逻辑替代原代码的try-except(两种方式都可行,这里更直观易懂),确保每个年份对应一个数值列表。 - 平均值计算:先对年份进行排序,再对每个年份的数值列表求和并除以数量,最后格式化输出结果。
运行这段代码后,你会得到如下输出:
年份 平均值 1969 324.000 1970 328.013 1971 332.194
内容的提问来源于stack exchange,提问作者Hero _of_Hell
相关产品推荐
相关产品推荐

