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

おそらく、ファイルに少なくとも 1行は行があります (通常は最後の行)。それを明示的にテストします:

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

代わりに、学生の記録を読み取るcsvモジュールを参照することをお勧めします。空行をスキップする必要がありますが、コンマ分割は自動的に処理されます。

于 2013-11-03T02:00:00.977 に答える