Rohit Singh
Rohit Singh

Reputation: 11

How to break between loop by creating a condition in python

lst = []
while True:
    try:
        arr = int(input("Enter number of elements: "))
        if arr == "Quit":
            break
    except ValueError:
        print("Invalid Input")
        continue
    else:
        break
while True:
    try:
        for i in range(0, arr):
            ele = int(input("Enter the elements:"))
            lst.append(ele)
            print(lst)
    except ValueError:
        print("Invalid Input")
        continue
    else:
        break

How can I create a condition to exit the program at any point in the loop by specifically entering the conditioned term? Like when it asks me to enter an element, but i want to break the program right at that point by entering "Quit". How to do that in this code? (Learner)

Upvotes: 0

Views: 314

Answers (3)

Ciph3rS3curity
Ciph3rS3curity

Reputation: 9

def one():
    message = ""
    while message != "Quit":
        message = input("Type in Order > ")
        if message == "Run":
            print("Run some Code")
            message = input("What do u want to run ? > ")
            if message == "Exel":
                print("Runing Exel")
            else:
                pass
         else:
             pass

while True:
    one()

Here you can pass in funktions that will run when you call it by its Name. If u write Quit it will start over again. It starts over again if you write something wrong. U could do an FailExeption for that if u want to.

Upvotes: 0

aneroid
aneroid

Reputation: 15962

Use sys.exit() to exit the program completely. Use break to exit the specific loop you're in (which you've used).

Other notes:

  1. You're doing arr = int(input(...)) but you want to accept the input of "Quit" which is a string. So if the user enters "Quit", it raise ValueError and the loop continues. So check for "Quit" first and if it's not quit, then convert to int with the try-block

    • Same applies for the 2nd loop where you ask the user for the elements in the list
  2. Btw, your second loop's while True loop should be inside the for-loop which gets each element.

lst = []
while True:
    arr = input("Enter number of elements: ")
    if arr == "Quit":
        sys.exit()  # will exit completely
    try:
        arr = int(arr)  # check for int in the try-block, error raised here, if not int
        break           # can put break here instead of in else, any is okay
    except ValueError:
        print("Invalid Input")
        # continue not needed here, since it loops infinitely by default


for i in range(0, arr):
    while True:
        ele = input("Enter the elements:")
        if ele == "Quit":
            sys.exit()  # will exit completely
        try:
            ele = int(ele)  # check for int in the try-block, error raised here, if not int
            lst.append(ele)
            break           # breaks out of `while` loop, not `for` loop; good
        except ValueError:
            print("Invalid Input")
            # continue not needed here, since it loops infinitely by default

print(lst)  # print the full list after all the inputs

The pattern for your input is repeated:

  • Ask user for input
  • if input is "Quit", then exit completely
  • otherwise, convert the input to an int

So this can put into a function, which you call in both places:

def int_or_quit(msg):
    """`msg` is the message you want to show at input"""
    while True:
        item = input(msg)
        if item == "Quit":
            sys.quit()  # will exit completely
        try:
            return int(item)  # try converting to int and return
        except ValueError:
            print("Invalid Input")
            # repeats by default

# use the function above in your two code blocks, which are now simplified:
lst = []
arr = int_or_quit("Enter number of elements: ")
# program exits before if user "Quit", next part won't execute

for i in range(0, arr):
    ele = int_or_quit("Enter an element:")
    lst.append(ele)

print(lst)

Upvotes: 1

Andrey
Andrey

Reputation: 925

I can see that there're 2 blocks in your code snippet. I'd suggest organising them in distinct functions, where function name infers a function goal (instead of comments):

def get_list_size():...
def fill_list():...

Next thing to do is deciding about function's return values:

from typing import List, Optional

def get_list_size() -> Optional[int]:
"""
:returns: number of desired elements of list or None, if "Quit" was pressed
:raises: ValueError exception, if non integer value was pressed
"""

def fill_list(lst_size: int) -> List[int]:
"""
returns: filled list
throws: ValueError exception, if non integer value was pressed
"""

Here you can see, how Optional type hint is used to add condition logic into the program.
Lats thing to do is to fill your functions with lightweight code:

def get_list_size() -> Optional[int]:
    """
    :returns: number of desired elements of list or None, if "Quit" was pressed
    :raises: ValueError exception, if non integer value was pressed
    """
    while True:
        try:
            input_value = input("Enter number of elements: ")

            # Pay attention: you have to check string input_value, not    int(input_value).
            # Checking int(input_value) would raise exception before 'Quit' validation.
            if input_value == "Quit":
                return None

            return int(input_value)

            # Could be rewritten as trinary if
            # return None if input_value == "Quit" else int(input_value)
        except ValueError:
            print("Invalid Input")
            # continue <- Not needed here


def fill_list(lst_size: int) -> List[int]:
    """
    returns: filled list
    throws: ValueError exception, if non integer value was pressed
    """
    lst = []
    while len(lst) < lst_size:
        try:
            ele = int(input("Enter the elements:"))
            lst.append(ele)
            print(lst)
        except ValueError:
            print("Invalid Input")
        
    return lst

Pay attention: in fill_list function you have to try/except each element, so while loop was moved outside.
Last thing to do is running these functions:

desired_list = []
desired_list_size = get_list_size()
if desired_list_size is not None:
    desired_list = fill_list(desired_list_size)

Upvotes: 0

Related Questions