0

please help me.

for the practice project in chapter 3 of 'automate the boring stuff with python', I made my own code. but it has errors I could not fix.

def collatz(number):

    if number == 1:
        print('the sequence is done')

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

    else:
        print(number * 3 + 1)
        collatz(number * 3 + 1)

def begin():

    try:
        num = int(input("enter an integer: "))

    except ValueError:
        print("Please enter an integer greater than 1.")
        begin()

    if not num > 1:
        print("Please enter an integer greater than 1.")
        begin()

    collatz(num)

begin()

running it makes a loop error. I have tried to fix it but I just got stuck on it.

Ch3steR
  • 20,090
  • 4
  • 28
  • 58
HM Chu
  • 13
  • 3
  • can you add the error? I just ran your code and it works fine. Not sure what you are trying to code. – Tarun Kolla Mar 07 '20 at 05:22
  • you've got yourself into a recursion. – Vishal Singh Mar 07 '20 at 05:30
  • when you run my code, at first, entering an integer greater than 1, does not make an error. but once you enter an 1 or 0 or less than them, and then if you enter a good integer like 10, 17 etc you can see the error. – HM Chu Mar 07 '20 at 06:32

2 Answers2

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

try:
    user_input = int(input('Enter a number:\n'))
    new_num = collatz(user_input)
    while new_num != 1:
        new_num = collatz(new_num)
except ValueError:
    print('Please enter an integer')

It says to print and return, so you don't need to use recursion. Here's how I did the program. I also used a while loop to repeat the process until a certain condition was met (until the value was 1).

-1

you've missed the base condition for your recrusive program.
You need to know recursion in order to understand how your code is behaving and functioning.
for now, the iterative version of your recursive program is:

def collatz(number):

    if number == 1:
        print("the sequence is done")

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

    else:
        print(number * 3 + 1)
        collatz(number * 3 + 1)


def begin():

    while True:
        try:
            num = int(input("enter an integer: "))
            if not num > 1:
                print("Please enter an integer greater than 1.")
                continue
        except ValueError:
            print("Please enter a valid integer greater than 1.")
            continue
        collatz(num)
        break


if __name__ == "__main__":
    begin()
Vishal Singh
  • 6,014
  • 2
  • 17
  • 33