2

好的,我知道这个话题已经讨论过好几次了,但是我所看到的都没有帮助我。我在标题中收到错误,我不确定如何修复该错误。这是我的代码:

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

1 回答 1

5

您的文件中可能至少有一个行(通常是最后一行);明确测试:

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

您可能想查看该csv模块来阅读您的学生记录;您仍然需要跳过空行,但会为您处理逗号拆分。

于 2013-11-03T02:00:00.977 回答