Пытаетесь рассчитать среднее значение списка с плавающей точкой? - PullRequest
0 голосов
/ 25 апреля 2020

Я не знаю, правильно ли я получу float значения, но это то, что я имею до сих пор.

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы используете функцию regex внутри for loop каждой строки файла. Таким образом, вы вычисляете среднее значение для одного числа.

Сначала необходимо вычислить среднее значение, а затем распечатать содержимое каждой строки:

import re
import statistics

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

    <b>num_list = re.findall(r"[-+]?\d*\.\d+|\d+", grades_file.read())</b> #get all grades from file
    <b>grades = list(map(float, num_list)) #convert to float</b>
    <b>average = statistics.mean(grades) #compute average</b>
    # Read lines & store grades
    <b>grades_file.seek(0)</b> #reset file position
    for file_lines in grades_file:
        lines = file_lines.rstrip('\n')
        print(lines)
        print(average)
0 голосов
/ 25 апреля 2020

Мне удалось понять это. Я не знаю почему, но мне пришлось поместить среднее значение в отдельную функцию

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)

Вроде бы обходной путь, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...