Home > Net >  Collatz sequence. Dealing with exception handling
Collatz sequence. Dealing with exception handling

Time:09-28

I just started learning python 3 and have been having some issues when trying to understand exception handling. I am going through a tutorial book that has given me a small project called the 'The Collatz Sequence'

its essentially a program that evaluates any integer down to '1' by using a some simple math.

I have been able to successfully get the program to work UNTIL the user inputs anything but an integer. At first I was getting ValueError, which was corrected by using the except ValueError:.

Now I seem to be getting NameError: name 'number' is not defined

Any help is appreciated. Just trying to get an understanding of exception handling.

def collatz(number):
    if number % 2 == 0:
        even_number = number//2
        print(even_number)
        return even_number
    elif number % 2 == 1:
        odd_number = (number * 3   1)
        print(odd_number)
        return odd_number

try:
    number = int(input('Enter Number: '))
except ValueError:
    print('Please enter an integer')
while int(number) != 1:
    number = collatz(number)

CodePudding user response:

You have to have the logic inside try block if you are getting exceptions. Then you can handle it when you face with an exception. In your case you can have the while block inside the try like below. According to the exceptions you can handle them below as you have done already.

def collatz(number):
    if number % 2 == 0:
        even_number = number//2
        print(even_number)
        return even_number
    elif number % 2 == 1:
        odd_number = (number * 3   1)
        print(odd_number)
        return odd_number

try:
    number = int(input('Enter Number: '))
    if number != 1:
        number = collatz(number)
except ValueError:
    print('Please enter an integer')

CodePudding user response:

A possibility would be to keep track of whether an integer was given as input using a boolean value. Consider the (adapted) code below:

def collatz(number):
    if number % 2 == 0:
        even_number = number//2
        print(even_number)
        return even_number
    elif number % 2 == 1:
        odd_number = (number * 3   1)
        print(odd_number)
        return odd_number

# Keep asking for input until the user inputs an integer
got_integer = False
while not got_integer:
    try:
        number = int(input('Enter Number: '))
        got_integer = True
    except ValueError:
        print('Please enter an integer')

while int(number) != 1:
    number = collatz(number)

As you can see, I define a boolean variable got_integer. Initially, I set its value to False. After this variable definition is a while loop, which keeps executing the loop body until the value of got_integer is True. Now you simply set the value of got_integer to True upon a succesfull input (i.e. if the execution of the line number = int(input('Enter Number: ')) succeeds).

  • Related