2014-11-17 4 views
-1

У меня проблемы. Итак, для моего задания мой учитель хочет, чтобы мы читали данные и выводили данные в другой файл. Теперь данные, которые мы читаем, - это имя студентов (строка 1) и их оценки (строка 2). Теперь он хочет, чтобы мы их прочитали, а затем напишем в другой файл. Напишите их в двух строках. Линия первая, будучи учеником, и вторая строка, являясь их средним. Затем запишите средние значения в список и запустите весь список с помощью среднего, среднего и стандартного отклонения. Вот пример некоторых данных из файла.Проблемы с моей программой python

Aiello,Joseph 
88 75 80 
Alexander,Charles 
90 93 100 98 
Cambell,Heather 
100 100 
Denniston,Nelson 
56 70 65 

Итак, как вы видите, это фамилия первая, разделенная запятой, а затем первая. Затем, на второй строке, их оценки. Он хочет, чтобы мы нашли среднее из них, а затем напишем их под именем учеников. Это та часть, с которой у меня проблемы. Я знаю, как найти среднее. Добавьте оценки, затем разделите их на количество полученных оценок. Но как мне поместить это в python? Может ли кто-нибудь помочь? Кроме того, у меня уже есть средняя, ​​средняя, ​​стандартная программа отклонения. Как бы я помещал средние значения, которые я получаю из первой части в список, а затем помещаю весь список через среднюю, среднюю, стандартную программу отклонений. И вернемся к моему первоначальному вопросу. Что-то не так с тем, что у меня есть до сих пор? Что мне нужно добавить/изменить? Вот мой код.

def main(): 
    input1 = open('StudentGrades.dat', 'r') 
    output = open('StudentsAvg', 'w') 
    for nextLine in input1: 
     output.write(nextLine) 
    list1 = nextLine.split() 
    count = int(list1[3]) 
    for p in range(count): 
     nextLine = input1.readlin() 
     output.write(nextLine) 
     list2 = nextLine.split() 
     name = int(list2[1]) 
     grades = list2[2] 
     pos = grades.index(grade) 
     avg = 
+0

Вы пробовали этот код? Что вы получаете? –

+0

Ну, это терпит неудачу в AVG =, потому что я ничего не добавил к этому. Я знаю, как найти средние значения для классов, но как бы поместить это на язык python, чтобы он записывал его в строку два для каждого человека. Оценки + оценки слева/количество оценок = Сред. Но как бы преобразовать это в язык python. – Matty

ответ

0

Похоже, здесь есть несколько проблем. Во-первых, все, что вы читаете из файла, это строка, а не число. Во-вторых, вы, вероятно, должны делать все это в одном и том же цикле, в котором вы читаете строки. (Еще один момент - использовать with заявление, чтобы ваши файловые объекты, которые будут автоматически уничтожены, когда вы закончите с ними.) Таким образом, вы можете изменить свой код следующим образом:

def main(): 
    with open('StudentGrades.dat', 'r') as input1, open('StudentsAvg.txt', 'w') as output: 
     counter = 0 
     student_name = '' 
     for nextLine in input1: 
      if counter % 2 == 0: 
       student_name = nextLine 
      else: 
       grades = [int(x) for x in nextLine.split()] 
       avg = sum(grades)/len(grades) 
       print(student_name, file=output) 
       print(str(avg), file=output) 

      counter += 1 

Обратите внимание, что print(str, file) является текущим , предпочтительный метод для записи в файл.

+0

Как открыть выходной файл, на который python помещает эти данные? – Matty

+0

@Matty У вас уже есть. Это то, что открыто («StudentsAvg»). – furkle

+0

Ох. Я думаю, что я, должно быть, сделал что-то непонятное. Я должен прочитать данные из StudentGrades, а затем скажу python открыть целый новый файл, сохранить его и записать там данные. Данные в новом файле (StudentsAvg.txt) будут содержать их имена (в строке 1) и их среднее значение (по строке 2) – Matty

0

Некоторые усовершенствования, внесенные в исходный код:

def averagMarksCalculator(): # Learn to name your functions "Meaningfully" 
    # Using with clause - Learn to love it as much as you can! 
    with open('StudentGrades.dat') as input1, open('StudentsAvg.txt', 'w') as output:  
    for nextLine in input1: 
     strToWrite = nextLine; # Write student's name 
     output.write(nextLine) # Print student name 
     list1 = (input1.readline()).split() # split them into individual strings 
     avg = 0 # initialise 
     list1 = [int(x) for x in list1] 
     avg = sum(list1)/len(list1) 
     output.write("Average marks........"+str(avg)+"\r\n") # avg marks of student 
    input1.close() 
    output.close() 

Обратите внимание, что «\ г \ п», чтобы убедиться, что у вас есть разрыв строки после имени и средние оценки студента напечатанных на файл результатов. Если вам не нужна пустая новая строка в качестве разделителя, используйте только «\ r».

+0

Как открыть файл, в который моя программа записывает данные? – Matty

+0

Ну, как я уже сказал, мне нужно прочитать данные (пример данных из файла, который я вам показал), затем записать данные в другой файл (StudentsAvg), и в этом файле предполагается Aiello, Joseph (строка 1) и по первой строке - среднее значение этих трех оценок (строка 2). И я должен сделать это для каждого ученика. Напишите их имена в первой строке и их среднее значение по строке два, в другой файл – Matty

+0

Вот что я думал, что мне нужно было делать. Итак, где же python сохраняет этот новый файл с новыми данными? – Matty

Смежные вопросы