2015-09-04 3 views
0

только начал программировать с питоном (на самом деле программирования в целом) и написал короткую программу, которая упорно отказывается работать должным образом. Хотя вывод выглядит отлично, есть еще некоторые строки ошибок, от которых я не могу избавиться. Поэтому я был бы благодарен за любую помощь/предложения. Вот код:странно индексации Ошибка

# takes a list with 5 columns per line as an input 
# last name, first name, 3 score - values (exam1, exam2, final) 
# prints out a formatted table with first name, last name and a weighted score sum 

def parse_line(line_str): 
    ''' 
    :param line_str: expects a line of form last, first, exam 1, exam2, final 
    :return: a tuple containing first+last and list of scores 
    ''' 
    field_list = line_str.strip().split(",") 
    name_str = field_list[1] + " " + field_list[0] 
    score_list = [] 
    for element in field_list[2:]: 
     score_list.append(int(element)) 
    return name_str, score_list 


def weighted_grade(score_list, weights=(0.3, 0.3, 0.4)): 
    ''' 
    :param score_list: expects 3 elements in score_list 
    :param weights: multiples each element by its weigth 
    :return: returns the sum 
    ''' 
    grade_float = \ 
     (score_list[0] * weights[0]) + \ 
     (score_list[1] * weights[1]) + \ 
     (score_list[2] * weights[2]) 
    return grade_float 

grade_file = open("/home/jan/Desktop/Grades.txt", "r")    
print("{:>13s} {:>15s}".format("Name", "Grade"))    # header of the table 
print("-" * 30) 
for line_str in grade_file: 
    name_str, score_list = parse_line(line_str)     # passing it the first function, multiple assignment 
    grade_float = weighted_grade(score_list) 
    print("{:>15s} {:14.2f}".format(name_str, grade_float))  # final table 

И это сообщение об ошибке:

Traceback (most recent call last): 
    File "/home/jan/PycharmProjects/introduction/more.py", line 27, in <module> 
     Name   Grade 
    name_str, score_list = parse_line(line_str) 
------------------------------ 
    File "/home/jan/PycharmProjects/introduction/more.py", line 8, in parse_line 
    John Smith   30.00 
    name_str = field_list[1] + " " + field_list[0] 
Larry CableGuy   30.00 
IndexError: list index out of range 
    Try Harder   40.00 
    Monty Python   100.00 

ответ

1

У вас есть строка в файле без запятой в нем. Обычно это происходит потому, что линия полностью пуста. В результате str.split() возвращает список с не более чем 1 элементом в нем, поэтому попытка индексации элемента 1 (второй) не выполняется.

Пропустить такие строки:

for line_str in grade_file: 
    if ',' not in line: 
     continue 
    name_str, score_list = parse_line(line_str)     # passing it the first function, multiple assignment 
+1

кстати. Я действительно впечатлен тем, как быстро вы обнаружили ошибку –

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