Automate The Boring Stuff With Python - Collatz Sequence

Viewed 686

I'm very new to any sort of coding, currently using python 3.3. I've managed to run the Collatz Sequence accurately in python with the following:

while True: # The main game loop.
number = int(input('Enter number:\n'))  
def collatz(number):
    while number !=1:
        if number % 2==0: #even numbers
            number=number//2
            print(number)
        elif number % 2!=0: #odd numbers
            number=number*3+1
            print(number)
collatz(number)

However, I'm unsure of how and where to add a ValueError strong, for when the user enters a non-integer, something like the following:

except ValueError:
    print('Only integers accepted.')

I'm very new to python, so if any answers could have a little explanation I'd be very appreciative. Thanks

5 Answers

Put it at the very very top. Parameter constraints should always happen as soon as possible, so that you don't waste time running code you're just going to error out of.

def progress(percentage):
    if percentage < 0 or percentage > 100:
        raise ValueError
    #  logic

I assumed that you're referring to Exception Handling, Validation part must be done in the beginning.

    while True: # The main game loop.
        
        try:
            number = int(input('Enter number:\n'))
   
        except ValueError:
            print("Only integers accepted! Please try again ...")
        else:
            collatz(number)
#output:
#
#Enter number:
#abc
#Only integers accepted! Please try again ...
#Enter number:
#5
#16
#8
#4
#2
#1
#Enter number:

But program will continue looping, termination conditions needed.

number = None

while number != int():
    try:
        number = int(input("Enter number: "))
        break
    except:
        print("Enter a valid Number")

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

collatz(number)
def collatz():

    try:
        number = int(input("Enter number: "))

        while True:
            if number == 1 or number == 0:
                break

            elif number % 2 == 0:
                number = number // 2
                print(number)

            elif number % 2 == 1:
                number = 3 * number + 1
                print(number)

    except:
        print("Enter in a valid number")


collatz()

Try this:

def collatz(number):
    if number % 2 == 0:
        print(number // 2)
        return number // 2
    else:
        print(3 * number + 1)
        return 3 * number + 1

while True:
    try:
        number = int(input("Enter a Number or type 0 to exit: "))
        if number == 0:
            break
        while True:
            if number != 1:
                number = collatz(number)
            else:
                break
    except ValueError:
        print("Enter an integer number")
Related