1

I am getting an infinite loop. I am not sure on how to covert the result as the new number variable and put it back in the while loop.

#Collatz squence

import sys
def collatz():
    try:
         print('Enter a number')
         number = int(input())
    except:
        ValueError
        print('Please type an integer')

    while number != 1:
        if number %2 == 0:
            result = number//2

            print(result)

        elif number %2 == 1:

            result = 3*number + 1

            print(result)

        **result = number**


    while number == 1:
        print ('You have arrived at the number itself')
        sys.exit()

collatz()
Hans Strausl
  • 605
  • 5
  • 11

1 Answers1

0

The following works:

#Collatz squence

import sys
def collatz():
    try:
         print('Enter a number')
         number = int(input())
    except ValueError:
        print('Please type an integer')
        sys.exit(1)

    while number != 1:
        if number %2 == 0:
            result = number//2
            print(result)

    elif number %2 == 1:
        result = 3*number + 1
        print(result)
    number = result # set the number to the result

    while number == 1:
        print ('You have arrived at the number itself')
        sys.exit()

collatz()

Notice that I set the number to the result, in your code the number never changed, and so kept hitting the same block of code over and over. I also added a sys.exit call in the exception, we don't want to continue if someone entered in a bad value.

Hans Strausl
  • 605
  • 5
  • 11