简体   繁体   中英

How to break out of this while loop in python

I wrote a simple program for class; it gives the user the choice of 5 different questions to solve, area of a circle, volume of a cylinder/cube, or surface area of cylinder/cube. The user has to decide which problem they want to solve, and if they make an invalid decision the program loops back to the start to let them try again. However, I can't figure out how to break the loop; after solving one of the problems it still loops back to the start of the program.

invalid_input = True

def start () :

    #Intro
    print("Welcome! This program can solve 5 different problems for you.")
    print()
    print("1. Volume of a cylinder")
    print("2. Surface Area of a cylinder")
    print("3. Volume of a cube")
    print("4. Surface Area of a cube")
    print("5. Area of a circle")
    print()


    #Get choice from user
    choice = input("Which problem do you want to solve?")
    print()

    if choice == "1":

            #Intro:
            print("The program will now calculate the volume of your cylinder.")
            print()

            #Get radius and height

            radius = float(input("What is the radius?"))
            print()
            height = float(input("What is the height?"))
            print()

            #Calculate volume
            if radius > 0 and height > 0:
                import math

                volume = math.pi * (radius**2) * height
                roundedVolume = round(volume,2)

            #Print volume
                print("The volume is " + str(roundedVolume) + (" units."))
                invalid_input = False

            else:
                print("Invalid Inputs, please try again.")
                print()


    elif choice == "2":

            #Intro:
            print("The program will calculate the surface area of your cylinder.")
            print()

            #Get radius and height

            radius = float(input("What is the radius?"))
            print()
            height = float(input("What is the height?"))
            print()

            #Calculate surface area
            if radius > 0 and height > 0:
                import math
                pi = math.pi
                surfaceArea = (2*pi*radius*height) + (2*pi*radius**2)
                roundedSA = round(surfaceArea,2)

            #Print volume
                print("The surface area is " + str(roundedSA) + " units." )
                invalid_input = False

            elif radius < 0 or height < 0:
                 print("Invalid Inputs, please try again.")
                 print()


    elif choice == "3":

            #Intro:
            print("The program will calculate the volume of your cube.")
            print()

            #Get edge length

            edge = float(input("What is the length of the edge?"))
            print()

            #Calculate volume
            if edge > 0:

                volume = edge**3
                roundedVolume = round(volume,2)

                #Print volume
                print("The volume is " + str(roundedVolume) + (" units."))
                invalid_input = False

            else:
                print("Invalid Edge, please try again")
                print()


    elif choice == "4":

            #Intro:
            print("The program will calculate the surface area of your cube.")
            print()

            #Get length of the edge

            edge = float(input("What is the length of the edge?"))
            print()


            #Calculate surface area
            if edge > 0:

                surfaceArea = 6*(edge**2)
                roundedSA = round(surfaceArea,2)

            #Print volume
                print("The surface area is " + str(roundedSA) + (" units."))
                invalid_input = False

            else:
                  print("Invalid Edge, please try again")
                  print()



    elif choice == "5":

            #Intro
            print("The program will calculate the area of your circle")
            print()

            #Get radius
            radius = float(input("What is your radius?"))

            if radius > 0:

            #Calculate Area
                import math
                area = math.pi*(radius**2)
                roundedArea = round(area,2)
                print("The area of your circle is " + str(roundedArea) + " units.")
                invalid_input = False

            else:
                print("Invalid Radius, please try again")
                print()


    else:
        print("Invalid Input, please try again.")
        print()

while invalid_input :
    start ()

The preferred way for this kind of code is to use a while True statement like so,

while True:
n = raw_input("Please enter 'hello':")
if n.strip() == 'hello':
    break

This is an example, that you can correctly change for your needs.Here is the link to documentation.

You can add an option to exit.

print('6. Exit')

...
if choice=='6':
    break

Or you can break on any non-valid input.

else:
    break

invalid_input = True is a global variable (outside any function).

Setting invalid_input = False in your function sets a local variable, unrelated to the global one. To change the global variable, you need the following (greatly simplified) code:

invalid_input = True

def start():
    global invalid_input
    invalid_input = False

while invalid_input:
    start()

Global variables are best to be avoided, though. Better to write a function to ensure you have valid input:

def get_choice():
    while True:
        try:
            choice = int(input('Which option (1-5)? '))
            if 1 <= choice <= 5:
                break
            else:
                print('Value must be 1-5.')
        except ValueError:
            print('Invalid input.')
    return choice

Example:

>>> choice = get_choice()
Which option (1-5)? one
Invalid input.
Which option (1-5)? 1st
Invalid input.
Which option (1-5)? 0
Value must be 1-5.
Which option (1-5)? 6
Value must be 1-5.
Which option (1-5)? 3
>>> choice
3

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