Вам нужно добавить eof к глобальным переменным в readRecord ():
...
def readRecord():
global name, course, grade, eof
...
Но ваше решение немного непитонно.Как насчет чего-то более короткого и гибкого:
import re
print ("grade report\n").center(60).upper()
print "name".upper(),"course".rjust(22).upper(),"grade".rjust(32).upper()
print "-" * 60
for line in open("grades.txt"):
name, course, grade = re.split(" *", line.strip())
print "%-21s%-34s%-21s" % (name, course, grade)
raw_input("\nRun complete. Press the Enter key to exit.")
Регулярное выражение очень простое и разбивается на несколько пробелов.Если вы используете разделитель как-то еще, то замените регулярное выражение " *"
на ваш разделитель.
А вот версия, в которой используются python-диктанты для отслеживания курсов и оценок по студентам (т.е. ваш целевой результат):
import re
print ("grade report\n").center(60).upper()
print "name".upper(),"course".rjust(22).upper(),"grade".rjust(32).upper()
print "-" * 60
grades = {}
total_courses = 0
for line in open("grades.txt"):
name, course, grade = re.split(" *", line.strip())
if not grades.get(name): grades[name] = []
grades[name].append([course, grade])
for name, data in grades.items():
for course, grade in data:
print "%-21s%-34s%s" % (name, course, grade)
name = ""
print "%-21sTotal courses taken = %d\n" % (" ", len(data))
total_courses += len(data)
print "Total courses taken by all students = %d" % total_courses
raw_input("\nRun complete. Press the Enter key to exit.")
Кстати, похоже, вам нужно узнать больше о python (и способе программирования на python).Я рекомендую Dive Into Python .IMO - это самый быстрый (и самый интересный) способ достичь скорости в python, если у вас есть некоторый опыт программирования.