2013-11-03 28 views
1

好的,我知道這個話題已經被解決了好幾次,但沒有一個我看到的是幫助我。我在標題中遇到了錯誤,我不知道如何解決錯誤。這裏是我的代碼:ValueError:需要超過1個值才能解壓

def loadRecords(): 
    f = open("stu.txt", "r") 
    students = f.readlines() 
    f.close() 
    return students 

def addStudent(): 
    n = input("Enter student's name: ") 
    ex1 = input("Enter Exam 1 grade: ") 
    ex2 = input("Enter Exam 2 grade: ") 
    ex3 = input("Enter Exam 3 grade: ") 
    return n + " " + ex1 + " " + ex2 + " " + ex3 + "\n" 

def displayStudents(students): 
    for record in students: 
     n, ex1, ex2, ex3 = record.split(",") 
     ex1 = int(ex1) 
     ex2 = int(ex2) 
     ex3 = int(ex3) 
     print("%-10s %5s %5s %5s" % (n, ex1, ex2, ex3)) 

def displayAvg(students): 
    n = 1 
    for record in students: 
     n, ex1, ex2, ex3 = record.split(",") 
     ex1 = int(ex1) 
     ex2 = int(ex2) 
     ex3 = int(ex3) 
     avg = (ex1 + ex2 + ex3)/3 
     print("%-10s %5s" % (n, round(avg, 1))) 
    n += 1 

def saveRecords(students): 
    f = open("stu.txt", "w") 
    f.writelines(students) 
    f.close 

def main(): 
    students = loadRecords() 

    while True: 
     print("""       
Program Options. 
    1.) Display all contacts 
    2.) Create new contact 
    3.) Display Averages 
    4.) Save and exit 
    """) 
     option = input("Enter 1, 2, or 3: ") 
     print() 

     if option == "1": 
      displayStudents(students) 
     elif option == "2": 
      newRecord = addStudent() 
      students.append(newRecord) 
     elif option == "3": 
      displayAvg(students) 
     elif option == "4": 
      saveRecords(students) 
      break 
     else: 
      print("Not happening") 

main() 

下面是收到錯誤:

Traceback (most recent call last): 
    File "C:/Python33/Program 4/pro4.py", line 65, in <module> 
    main() 
    File "C:/Python33/Program 4/pro4.py", line 53, in main 
    displayStudents(students) 
    File "C:/Python33/Program 4/pro4.py", line 16, in displayStudents 
    n, ex1, ex2, ex3 = record.split(",") 
ValueError: need more than 1 value to unpack 

下面是我使用的文件,如果你想運行的代碼中使用記事本。

sam wilson,98,80,73 
sue green,92,98,74 
sue adams,89,89,92 
ron harris,90,87,100 
linda tyler,76,72,88 
dave smith,72,91,75 
steve davis,88,92,84 

回答

4

你可能有至少一個線在你的文件(通常是最後一行);明確地測試:

for record in students: 
    if not record.strip(): 
     continue 
    n, ex1, ex2, ex3 = record.split(",") 

你可能想看看csv module閱讀你的學生記錄,而不是;你仍然需要跳過空行,但逗號分割是爲你處理的。

+0

好吧,那工作,直到我試圖添加一個學生,然後查看文件 – user2899009

+0

@ user2899009:那是因爲你不是用*空格*而不是寫出學生,而不是逗號。 –

+0

@ user2899009:如果不清楚,Martijn的意思是因爲你在文件中添加了空格而不是逗號分隔的記錄。爲了解決這個問題,只需要將'addStudent()'的最後一行改爲'return','。join((n,ex1,ex2,ex3))''。 – martineau

相關問題