简体   繁体   中英

While loop not breaking?

I have written a main script that has a menu with 5 different options, the fifth option is if the user wants to quit the program. If the user types 5 in the main menu the program is supposed to quit, but it doesn't... It just keeps on looping through the menu. Can anyone help me resolve this issue??

menuItems = np.array(["Load new data", "Check for data errors", "Generate plots", "Display list of grades","Quit"])

userinput = input("Please enter name of the data file: ")
grades = dataLoad(userinput)


while True:

    choice = displayMenu(menuItems)

    while True:
        if (choice == 1):
            userinput = input("Please enter name of the data file: ")
            grades = dataLoad(userinput)
            break


        elif (choice == 2):
            checkErrors(grades)
            break

        elif choice == 3:
            gradesPlot(grades)

        elif choice == 4:
            show = listOfgrades(grades)
            showList(show)

        elif (choice == 5):
            break


        else:
            print("Invalid input, please try again")
            break

In your code, when you call break, it breaks from the inner while loop and goes to the outer while loop which causes the whole thing to go on again. If for some cases you want both of the while loops to break then you can use some sort of a flag.

Example,

flag = False

while True:
    while True:
        if (1 == var):
            flag = True
            break
    if flag:
        break

//Your code

flag = False
while True:

    choice = displayMenu(menuItems)

    while True:
        if (choice == 1):
            userinput = input("Please enter name of the data file: ")
            grades = dataLoad(userinput)
            flag = True
            break


        elif (choice == 2):
            checkErrors(grades)
            flag = True
            break

        elif choice == 3:
            gradesPlot(grades)

        elif choice == 4:
            show = listOfgrades(grades)
            showList(show)

        elif (choice == 5):
            flag = True
            break


        else:
            print("Invalid input, please try again")
            flag = True
            break

    if True == flag:
        break

You have nested loops, and break only breaks out of the inner loop.

To remedy this delete the nested loop and the break from the else block:

while True:
    choice = displayMenu(menuItems)

    if (choice == 1):
        userinput = input("Please enter name of the data file: ")
        grades = dataLoad(userinput)
        break
    elif (choice == 2):
        checkErrors(grades)
        break
    elif choice == 3:
        gradesPlot(grades)
    elif choice == 4:
        show = listOfgrades(grades)
        showList(show)
    elif (choice == 5):
        break
    else:
        print("Invalid input, please try again")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM