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
好吧,那工作,直到我試圖添加一個學生,然後查看文件 – user2899009
@ user2899009:那是因爲你不是用*空格*而不是寫出學生,而不是逗號。 –
@ user2899009:如果不清楚,Martijn的意思是因爲你在文件中添加了空格而不是逗號分隔的記錄。爲了解決這個問題,只需要將'addStudent()'的最後一行改爲'return','。join((n,ex1,ex2,ex3))''。 – martineau