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

Python计算含10000个数字的文本文件平均值报错求助

修复读取文件计算平均值的报错问题

问题描述

我要实现读取文件并计算、展示平均值的功能,写了一个计算整数列表平均值的mean函数,但运行时总是报错:invalid literal for int() with base 10:,我猜测是文件里有10000个数字导致的。

原代码如下:

def mean (lst):

    filename = "file_10k_integers_A.txt"
    with open(filename) as f:
        lst = [int(line) for line in f]

print("The average value is ", sum(lst)/len(lst))

lst = dir
print(mean(dir))

文本文件的部分数据示例:

384, 78, 894, 464, 681, 256, 729, 659, 393, 496
800, 329, 301, 979, 792, 537, 913, 279, 847, 276
33, 453, 892, 54, 921, 863, 400, 644, 923, 565
195, 656, 830, 701, 889, 923, 759, 635, 732, 395
761, 843, 417, 874, 954, 235, 31, 355, 980, 782

错误原因分析

  1. 数据解析错误:文件每行是用, 分隔的多个数字,直接把整行字符串转成int必然失败,因为行里包含逗号和空格,不是合法的整数格式。
  2. 函数逻辑混乱:mean函数的参数lst被内部重新赋值,而且函数没有返回值;另外你把内置函数dir赋值给lst,完全偏离了原本的逻辑,还会导致后续计算出错。

修复后的代码

def calculate_mean(filename):
    numbers = []
    with open(filename, 'r') as f:
        for line in f:
            # 去除行首尾空白,按", "分割成单个数字字符串
            num_strings = line.strip().split(', ')
            for num_str in num_strings:
                # 跳过空字符串(处理行尾可能的多余逗号)
                if num_str:
                    numbers.append(int(num_str))
    # 避免空列表导致除以0的错误
    return sum(numbers) / len(numbers) if numbers else 0.0

# 执行计算并打印结果
filename = "file_10k_integers_A.txt"
average = calculate_mean(filename)
print(f"The average value is {average}")

修复说明

  • 重新设计函数:将文件名作为参数传入,函数专注于读取文件、解析数据并返回平均值,逻辑更清晰。
  • 正确解析数据:针对每行的, 分隔格式,先分割再逐个转换为整数,解决了格式不匹配的问题。
  • 提升鲁棒性:处理可能出现的空字符串,同时避免空列表除以0的异常。
  • 移除错误赋值:不再使用dir覆盖列表变量,回归原本的业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:05:21