2015-08-31 2 views
0

Я прочитал все другие вопросы, заданные об этой ошибке python, и ни один из них не помогает мне, я новичок на python и действительно нуждаюсь в помощи. я должен найти среднюю некоторые студент результатов из файла и он приходит с ошибкой более одного значения для распаковки на строках 4 и 7Ошибка python требуется больше, чем одно значение для распаковки

fileName = classChoice + ".txt" # generate the name of the file to read 
with open (fileName) as f: 
    for line in f.readlines(): 
     userName,score= line.split(' : ') 
     scores[userName].append(int(score)) 
     total=0 
    for (userName, score)in fileName: 
     total=total+score 
     average= total/len(fileName) 
     print("the average is ", average) 
+1

Что делать, если на линии не было ':' присутствует? Чего вы пытаетесь достичь? –

+2

Вы пытаетесь распаковать два значения из строки, что вы ожидаете, произойдет с 'for (userName, score) в fileName:'? –

+0

вам нужно будет показать нам пример файла. –

ответ

0

Запись a, b = l будет работать только тогда, когда len(l) == 2 (для a, b, c = l, для len(l) == 3 и так далее).

Здесь, похоже, line.split(' : ') дает вам список, содержащий только одно значение, поэтому его нельзя распаковать.

В случае строки, такой как fileName, распаковка будет происходить на уровне символов. Здесь fileName содержит определенно более 2 символов (это не менее ".txt", если classChoice пуст), поэтому он не может работать. Здесь вы должны получить ValueError: too many values to unpack.

1

У вас есть два вопроса в коде.

userName,score= line.split(' : ') 

Это не получится, если строка не содержит ' : '. Например, строка с 'Foo: 12' будет работать с ошибкой, потому что перед двоеточием нет места. Вы лучше расщеплению в толстой кишке только, а затем обрезки пробелы из значений:

userName, score = line.split(':') 
scores[userName.strip()].append(int(score.strip())) 

Другой вопрос с помощью следующей строки:

for (userName, score)in fileName: 

fileName является строка, содержащая имя файла файла, который вы открыли до и считаете. То, что вы, вероятно, хотите сделать, - это перебирать через словарь scores. Обратите внимание, что вы собрали индивидуальные оценки для каждого пользователя, поэтому значения словаря на самом деле являются списками баллов. Таким образом, вам нужно повторить эти повторы:

for userName, userScores in scores.items(): 
    total = 0 
    for score in userScores: 
     total += score 
    average = total/len(userScores) 
    print("the average for", userName, "is", average) 
Смежные вопросы