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

Python读取numbers.txt计算平均值出错,求问题原因与修正方案

问题分析与解决

错误来源

  • readline()参数误用:readline(n)的参数n代表读取的最大字符数,而非行号。你传入1、2等数值时,会分段读取字符(包括换行符),导致转成整数时得到错误的拼接值(比如输出里的66、77等)。
  • 总和计算错误:代码中total = (num3 + num2 + num3 + num4 + num5)重复累加了num3,同时漏掉了num1,直接导致总和与平均值错误。

修正方案

方案1:修复原代码逻辑

调整readline()的使用方式,同时修正总和计算:

def main():
    file_numbers = open('numbers.txt', 'r')
    
    # 读取整行并去除换行符后转整数
    num1 = int(file_numbers.readline().strip())
    num2 = int(file_numbers.readline().strip())
    num3 = int(file_numbers.readline().strip())
    num4 = int(file_numbers.readline().strip())
    num5 = int(file_numbers.readline().strip())

    file_numbers.close()

    # 正确累加所有数字
    total = num1 + num2 + num3 + num4 + num5
    average = total / 5

    print(f'The numbers are: {num1}, {num2}, {num3}, {num4}, {num5}')
    print(f'Their average is: {average}')
    
main()

方案2:更灵活的通用写法(推荐)

如果文件行数不固定,用循环读取所有有效行,自动统计总和与数量,同时用with语句自动关闭文件(更安全):

def main():
    total = 0
    count = 0
    numbers = []
    
    with open('numbers.txt', 'r') as file_numbers:
        for line in file_numbers:
            # 去除空白字符,跳过空行
            clean_line = line.strip()
            if not clean_line:
                continue
            num = int(clean_line)
            numbers.append(num)
            total += num
            count += 1
    
    if count == 0:
        print("文件中无有效数字")
        return
    
    average = total / count
    print(f'The numbers are: {numbers}')
    print(f'Their average is: {average}')
    
main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:39