【问题标题】:Computing the average of non-negative numbers from a text file从文本文件计算非负数的平均值
【发布时间】:2017-01-02 07:08:33
【问题描述】:

我正在尝试读入一个整数文本文件,使其成为一个列表,计算所有整数的平均值,计算所有非负整数的平均值,打印最大值和最小值。我能够计算所有整数的平均值,但很难获得所有非负整数的平均值以及最大值和最小值。

这是我目前所拥有的:

file = open("numberlist.txt", "r")

sum = 0

list = []
for num in file:
    list.append(num)

poslist = []
for number in file:
    x = int(number)
    if x > 0:
        poslist.append(x)
        sum += number
posavg = sum / len(poslist)
print("The number of non-negative integers is ", len(poslist))
print("The average of the non-negtive integers is ", posavg)

【问题讨论】:

    标签: python python-3.x if-statement for-loop accumulator


    【解决方案1】:

    如果数字用空格分隔
    (或者,正如我从您的代码中了解到的那样,换行)
    这是一个非常短的“Pythonic”任务!

    首先,让我们将整个文件读入数字
    并自动关闭文件:

    with open('numberlist.txt') as f:
        nums = [int(x) for x in f.read().split() if int(x) >= 0]
    

    在前 2 行之后,您拥有所有非负数
    名为nums的列表中的数字!

    现在,平均值为:

    avg = sum(nums) / len(nums)
    

    而最小值/最大值将是:

    minNum, maxNum = min(nums), max(nums)
    

    仅此而已!

    现在,我尽可能多地推送 Python
    进入这个任务,所以通过理解这段代码你可以制作
    Python 的飞跃!

    【讨论】:

      【解决方案2】:

      这会保留您的大部分代码并为其添加非负数部分(也许应该改为正数?:)

      file = open("numberlist.txt", "r")
      
      sum = 0
      nonNegativeTotal = 0
      nonNegativeCount = 0
      
      list = []
      for num in file:
          list.append(num)
      
      for number in list:
          x = int(number)
          if x >= 0:
              nonNegativeCount += 1
              nonNegativeTotal += x
          sum += x
      avg = sum/len(list)
      avgNonNegative = nonNegativeTotal/nonNegativeCount
      print("The number of integers is ", len(list))
      print("The overall average is ", avg)
      print("The number of non-negative numbers is ", nonNegativeCount)
      print("The non-negative average is ", avgNonNegative)
      
      list.sort()
      print("The minimum number is ", list[0])
      print("The maximum number is ", list[-1])
      

      对于你可以做的最小值和最大值:

      minNum, maxNum = min(list), max(list)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        相关资源
        最近更新 更多