2015-10-21 3 views
0

Я начинаю изучать python, как читать и обрабатывать данные в текстовых файлах.Чтение номеров в текстовом файле

Допустим, у меня есть текстовый файл grades.txt:

.25 45 67 89 
.75 23 45 

Я хочу создать программу, которая средние ранги для каждой линии и умножает, что по весу, который всегда первым номером в каждая строка.

Затем он должен добавить взвешенную сумму для всех линий и распечатать окончательный сорт.

Как бы это сделать, если я не знал количество оценок в текстовом файле или у меня были разные веса?

В настоящее время я могу сделать это только в том случае, если я уже знаю, сколько будет классов.

код до сих пор:

def main(): 
    file = open("grades.txt", "r") 
    for line in file: 
     weight, gradeOne, gradeTwo, gradeThree = line.split() 
     grade = (int(gradeOne) + int(gradeTwo) + int(gradeThree)/3 

     print(float(weight) * grade) 

main() 

ответ

3

Вы можете использовать line.split(' ') возвращать список классов, где вес является list[0].

Затем вы можете избавиться от веса и прокрутить список в цикле for.

Вы добавляете все оценки, а затем делитесь по длине списка оценок.
Не включайте вес!

3

После разделения строки используйте map(), чтобы превратить каждый элемент в float. Используйте * распаковку, чтобы присвоить первый элемент weight, а остальное - list под названием grades.

def main(): 
    file = open("grades.txt", "r") 
    for line in file: 
     weight, *grades = map(float, line.split()) 
     print(weight * sum(grades)/len(grades)) 

main() 

Вы можете использовать удобные функции, такие как sum() и len() найти среднее значение. map(), float(), sum() и len() - все Python built-in functions.

+1

Я был бы дешев и делал '... = map (float, line.split())'. –

+0

@StefanPochmann - Это не просто дешево, это лучше. :) – TigerhawkT3

0

Это будет работать в Python 2.7, а также в 3.x.

def main(): 
    total_grade = 0 
    with open('grades.txt', 'r') as file: 
     for line in file: 
      split = line.split(' ') 
      grades = map(int, split[1:]) 
      line_grade = (sum(grades)/len(grades)) * float(split[0]) 
      print line_grade 
      total_grade += line_grade 
    print total_grade 

if __name__ == '__main__': 
    main() 
Смежные вопросы