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
相关产品推荐
相关产品推荐

