2015-08-31 32 views
0

我已經閱讀了所有其他問題關於這個python錯誤的問題,他們都沒有幫助我,我是一個Python初學者,真的需要幫助。我必須找到從文件中一些學生成績的平均值,並將其與錯誤出現一個以上的值來解壓就行4和7python錯誤需要多個值來解壓

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

你正在試圖從一個字符串中解壓兩個值,你預期會發生什麼與文件名中的(用戶名,分數):'? –

+0

您需要向我們展示示例文件。 –

回答

0

記號a, b = l只會工作,如果len(l) == 2(用於a, b, c = l,對於len(l) == 3等等)。

在這裏,它看起來像line.split(' : ')給你一個只包含一個值的列表,所以它不能被解壓縮。

在字符串如fileName的情況下,解包將在字符級別發生。這裏,fileName肯定包含超過2個字符(如果classChoice爲空,它至少爲".txt"),因此它無法工作。在這裏你應該得到ValueError: too many values to unpack

1

你的代碼有兩個問題。如果該行不包含' : ',則這將失敗。例如,一行'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) 
相關問題