yudontfly
yudontfly

Reputation: 21

How to loop after 'Except ERROR' line in Python

as part of the Chapter 3 exercise for Automate the Boring Stuff, I need to write a short program that mimics the Collatz sequence, where:

Below is my code so far, which seems to work but I would appreciate any advice/best practice for improving it.

My main question is, after the program prints 'Enter integers only', is there any short and simple way to loop back to the 'Enter any number: ' line? I can't think of anything atm besides complicated if loops. Thanks.

def collatz(number):
    if number % 2 == 0 :
        results = number // 2
        print(results)
        if results != 1:
            collatz(results)
    elif number % 2 == 1 :
        results = 3 * number + 1
        print(results)
        if results != 1:
            collatz(results)

try: 
    entry = input('Enter any number : ')
    number = int(entry)
    print(number)
    collatz(number)
except ValueError:
    print('Enter integers only.')
except KeyboardInterrupt:
    sys.end()

Upvotes: 1

Views: 48

Answers (4)

Rawres
Rawres

Reputation: 55

Put it in a "while" loop.

while True:
    try:
        ...
    except:
        ...

Upvotes: 0

M. Yasin
M. Yasin

Reputation: 66

You can define an iteration to make sure the input is integer type.

while True: # executes the loop body indefinitely
    try: 
        entry = input('Enter any number : ')
        number = int(entry)
        print(number)
        collatz(number)
        break  # immediately terminates the loop entirely
    except ValueError:
        print('Enter integers only.')
    except KeyboardInterrupt:
        sys.end()

Upvotes: 0

Vvamp
Vvamp

Reputation: 414

As you want to keep prompting the same, until the program exits. I'd suggest just encapsulating the program code in a while(true) loop:

while True:
    try: 
        entry = input('Enter any number : ')
        number = int(entry)
        print(number)
        collatz(number)
    except ValueError:
        print('Enter integers only.')
    except KeyboardInterrupt:
        sys.end()

Upvotes: 0

Mr. Developer
Mr. Developer

Reputation: 127

You can try using a while loop. The below code will be helpful for you.

def collatz(number):
    if number % 2 == 0 :
        results = number // 2
        print(results)
        if results != 1:
            collatz(results)
    elif number % 2 == 1 :
        results = 3 * number + 1
        print(results)
        if results != 1:
            collatz(results)

while True:
    try: 
        entry = input('Enter any number : ')
        number = int(entry)
        print(number)
        collatz(number)
    except ValueError:
        print('Enter integers only.')
    except KeyboardInterrupt:
        break # Stop the while loop.
        sys.end()

Upvotes: 1

Related Questions