Python - Почему я получаю здесь ValueError? - PullRequest
0 голосов
/ 31 марта 2020

Хорошо, я хочу продолжать запрашивать у пользователя choice до тех пор, пока они не введут что-то не 1-5, но в некоторых опциях (например, 2) программа переходит прямо в «Goodbye» после ValueError:

   if(genRoster(fileName, recordsDict) and fileName != ""):
        hwPts = 250
        print("Select an option: ")
        try:
            choice = int(input("1) Get lab scores \n2) Get homework scores \n3) Get midterm exam scores \n4) Get final exam scores \n5) Get overall grades\n").strip())
            while(choice > 0 and choice < 6):
                print("Name      %")
                if(choice == 1):
                    for name in recordsDict.keys():
                        print(name+"      "+str(student.getLPGrade(recordsDict[name]))+"%") # 6 spaces
                    print("Class     "+str(getLpAvg(recordsDict))+"%\n")
                elif(choice == 2):
                    for name in recordsDict.keys():
                        print(name+"      "+str(student.getHWGrade(recordsDict[name], hwPts))+"%") # 6 spaces
                    print('Class     % 1.1f' %getHwAvg(recordsDict, hwPts), "%\n")

                elif (choice == 3):
                    for name in recordsDict.keys():
                        print(name + "      " + str(student.getMTGrade(recordsDict[name])) + "%")  # 6 spaces
                    print("Class     " + str(getMtAvg(recordsDict)) + "%\n")
                elif (choice == 4):
                    for name in recordsDict.keys():
                        print(name + "      " + str(student.getFEGrade(recordsDict[name])) + "%")  # 6 spaces
                    print("Class     " + str(getFeAvg(recordsDict)) + "%\n")
                elif (choice == 5):
                    for name in recordsDict.keys():
                        print(name + "      " + str(student.getOverallGrade(recordsDict[name], hwPts)) + "%")  # 6 spaces
                    print("Class     ", str(getOvAvg(recordsDict, hwPts)), "%\n")
                print("Select an option: ")
                choice = int(input("1) Get lab scores \n2) Get homework scores \n3) Get midterm exam scores \n4) Get final exam scores \n5) Get overall grades\n"))
        except ValueError:
            print("Goodbye! 2")
    else:
        print("Goodbye!")

recordsDict - это словарь, содержащий студенческие объекты, сгенерированные с помощью

def genStud(studentName, labScores, hwScores, midtermScore, finalScore):
    return studentName, {"NAME": str(studentName).strip().title(), "LP": labScores, "HW": hwScores, "MT": int(midtermScore), "FE": int(finalScore)}

Но это не должно влиять на выбор. Что здесь происходит?

...