【问题标题】:calculate the average of numbers in each line of a file计算文件每一行中数字的平均值
【发布时间】:2021-05-06 16:28:19
【问题描述】:

我想编写一个程序,询问用户每行包含数字的文件名并打印每行的平均值。文件中的数字用空格分隔。 .txt 文件如下:

    23 55 12 90 42
    56 33 11 76 34
    91 42 45 88 23
    90 114 78 117 89
    116 64 25 77 33

我可以打开和读取文件

    f = open(input("File: "))
    for i in f:

通过开始 for 循环,我可以遍历这些行。但我不知道我如何只能在第一行,将第一行中的数字相加,然后将其除以 5 以获得平均值,然后对剩余的行执行此操作。我该怎么做?

【问题讨论】:

标签: python loops file numbers average


【解决方案1】:

考虑你的文本文件名是“numbers.txt” 您可以使用 readLines() 函数,例如:

file1 = open('numbers.txt', 'r')
Lines = file1.readlines()
count = 0

for line in Lines:
    count = 0
    sum_number = 0
    for i in line.split(' '):
        count += 1
        sum_number += int(i)
    print("avg: {}".format(sum_number / count))

输出将是:

avg: 44.4
avg: 42.0
avg: 57.8
avg: 97.6
avg: 63.0

【讨论】:

  • 您可以缩短它并使用enumerate 删除count。只是一个想法。
【解决方案2】:

改编自How to read numbers from file in Python?

如果你可以使用 Numpy,你可以使用:

with open('file.txt') as f:
    array = [[int(x) for x in line.split()] for line in f]

np.mean(array, axis=1)

【讨论】:

    【解决方案3】:

    使用基本 Python

    with open(input('File: ')) as f:
        for line_no, line in enumerate(f):                     # enumerate provides data and line number for each line
            numbers = [int(i) for i in line.rstrip().split()]  # convert each line to numbers
            avg = sum(numbers)/len(numbers)                    # using definition of average
            print(f'Avg. of line {line_no} is {avg}')          # print line number and average
            
    

    【讨论】:

      【解决方案4】:
      f = open(input("File: "))
      
      for i in f.readlines():
          line = list(map(int, i.strip("\n").split()))
          average = sum(line) / len(line)
          print(average)
      

      基本上,第一行获取文件名。

      第三行开始一个for循环,循环通过f.readlines,它基本上是文件中每一行的列表。

      第四行有点混乱。 i.strip("\n").split() 删除每一行中的\n,并按空格分割列表,所以你得到['23', '55', '12', '90', '42']。然后,list(map(int, 将此列表中的每个值从字符串转换为整数。

      最后,最后一行得到平均值。 sum(line) 将我们刚刚创建的列表中的每个元素相加。然后,len(line) 获取列表中值的数量。总之,当sun(line) 除以len(line) 时,得到平均值,然后打印出来。

      【讨论】:

        【解决方案5】:

        一个可能的解决方案是:

        name = input('File: ')
        
        with open(name, 'r') as f:
            lines = f.readlines()
        
        line_nr = 0
        for line in lines:
            line_nr += 1
            numbers = line.strip('\n').split(' ')
            sum_numbers = 0
            total_numbers = len(numbers)
            
            for number in numbers:
                int_number = int(number)
                sum_numbers += int_number
                
        
            
        
            print(f'The average of line {line_nr} is:', sum_numbers/total_numbers)
        

        输出:

        The average of line 1 is: 44.4
        The average of line 2 is: 42.0
        The average of line 3 is: 57.8
        The average of line 4 is: 97.6
        The average of line 5 is: 63.0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-02
          • 1970-01-01
          • 2019-04-03
          • 2014-04-23
          • 1970-01-01
          相关资源
          最近更新 更多