2016-03-24 2 views
2

Я пытаюсь написать программу, которая считывает список CSV оценки учащейся и делает следующее:программирования CSV чтение записи

Программа вычисляет средний экзамен для каждого студента и округляет его до целого числа, используя математику ceil, то он записывает имя и среднее значение экзамена в другой файл csv под названием examScores.csv Имена и оценки студентов в 5 точках максимального балла, например, если максимальный балл равен 98, тогда все печатные результаты> 93 должны быть напечатаны.
Число студентов, забивших в диапазоне 0 - 59, 60 - 69, 70 - 79, 80 - 89, 90 - 100 (чтобы отслеживать диапазоны, вы должны создать список счетчиков размером 5; при обработке номера в первом диапазоне вы обновляете местоположение 0, во втором диапазоне, местоположение 1 и т. д.).

У меня довольно тяжелое время с этим. Вот код, который я придумал до сих пор:

inpt1=open("grades.csv","r") 
outpt1=open("examscores.csv","w") 
studentname=[] 
studentlastname=[] 
gradeav=[] 
highav=0 
inpt1.readline() 

for line in inpt1: 
    data=line.split(",") 
    averages=math.ceil(data[2])+float(data[3])/2 
    studentname.append(data[0]) 
    studentlastname.append(data[1]) 
    gradeav.append(averages) 
inpt1.close() 
outpt1.close() 

Я не могу получить функцию CEIL математики для работы и мое Добавление данных не работает, как хорошо. Конечно, я не хочу, чтобы кто-то решал это для меня, просто нужен намек или толчок в правильном направлении.

+0

Предлагаю посмотреть потоки, которые обеспечивают правильное открытие и чтение файлов csv, сохранение этих данных в список и внесение средних значений в списки. В вашем коде есть несколько ошибок, все из которых объясняются здесь великими примерами всех 3. В конечном счете, может быть проще использовать список словарей для хранения ваших данных, но если это становится слишком сложным, вы можете технически придерживаться кучи отдельных списков. – Chris

ответ

0

Поскольку вы просите намек, я дам ему шанс.

Обратите внимание, что вы отдельно записываете имена и оценки. Более полезно записывать эти значения в согласованной структуре данных. Я предпочитаю список списка. Начать с

records = [] 

Следуйте за ним, используя чтение файла, разделение строк и извлечение значений. Затем вставьте его в записи.

records.append([average, last_name, first_name]) 

В конце цикла сортируйте записи по первому столбцу в порядке убывания. Подсказка: google "список списка python отсортирован по lambda". Из отсортированного списка выберите максимум и те 5 баллов ниже. Я оставлю это как упражнение для вас.

Вы также можете использовать отсортированный список для разделения на разные диапазоны. Подсказка: google "pison bisect package".

Что касается ваших вопросов с Math.ceil, попробуйте

average = math.ceil(0.5* (float(data[2]) + float(data[3]))) 

Позвольте мне знать, если требуется больше подсказок. :-)