【问题标题】:Trying to calculate the average of a float list?试图计算浮动列表的平均值?
【发布时间】:2020-08-08 15:45:58
【问题描述】:

我不知道我是否要以正确的方式获取floatvalues,但这就是我目前所拥有的。

grades_file = open('grades.txt', 'r')

# Print Header & spacer
print('Name' + '\t\tGrade')
print('---------------------')

# Read lines & store grades
for file_lines in grades_file:
    lines = file_lines.rstrip('\n')

    num_list = re.findall(r"[-+]?\d*\.\d+|\d+", lines)
    grades = [float(num) for num in num_list]
    average = statistics.mean(grades)

    print(lines)
    print(average)

现在我试图让它打印文件中的内容并分别打印数字的平均值,但这就是我得到的。

Output:

    Name        Grade
---------------------
   Mickey,Mouse 90.0
   90.0
   Jane,Doe     50.0
   50.0
   Minnie,Mouse 95.0
   95.0
   Donald,Duck  80.0
   80.0
   Daffy,Duck   70.0
   70.0

我在这里做错了什么?

编辑: num_list的内容:

['90.0']
['50.0']
['95.0']
['80.0']

当我尝试仅打印 num_list 时,它显示的结果类似于打印平均值。

输入文件的内容:

Mickey,Mouse 90.0
Jane,Doe     50.0
Minnie,Mouse 95.0
Donald,Duck  80.0
Daffy,Duck   70.0

【问题讨论】:

  • 可以打印num_list的内容吗?假设 num_list 包含数字列表,您的代码应该可以正常工作。有一个示例输入文件也会很有帮助。
  • 编辑添加文件和num_list的内容

标签: python python-3.x floating-point


【解决方案1】:

您在文件每一行的for loop 中使用regex 函数。因此,您正在计算单个数字的平均值。

你需要先计算平均值,然后打印每一行内容:

import re
import statistics

with open('grades.txt', 'r') as grades_file:
    # Print Header & spacer
    print('Name' + '\t\tGrade')
    print('---------------------')

    num_list = re.findall(r"[-+]?\d*\.\d+|\d+", grades_file.read()) #get all grades from file
    grades = list(map(float, num_list)) #convert to float
    average = statistics.mean(grades) #compute average
    # Read lines & store grades
    grades_file.seek(0) #reset file position
    for file_lines in grades_file:
        lines = file_lines.rstrip('\n')
        print(lines)
        print(average)

【讨论】:

    【解决方案2】:

    我设法弄明白了。我不知道为什么,但我不得不将平均成绩放在一个单独的函数中

    def grade_avg():
        grades_file = open('grades.txt', 'r')
        file_contents = grades_file.read()
    
        num_list = re.findall(r"[-+]?\d*\.\d+|\d+", file_contents)
        grades = [float(num) for num in num_list]
        average = mean(grades)
    
        print('Average Grade:', average)
    

    这似乎是一个漫长的解决方法,但它确实有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多