Skip to content
Advertisement

Collatz’s hypothesis testing in Python

I am trying to build a small program to test the collatz’s hypothesis. So far, I have the following:

c0 = int(input("Enter an integer and non-zero number"))
steps = 0
while c0 != 1:
    if c0%2:
        c0 = c0/2
        steps += 1
    elif c0%2 !=0: 
        c0= (3*c0) + 1
        steps += 1
    print (c0)
print (steps)

But when I run it, it’s going into an endless loop of 0.0s. Not really getting where the problem is.

Advertisement

Answer

As Nearoo mentioned, c0 % 2 is the same as c0 % 2 != 0 because 1 (when c0 is odd, ‘c0 % 2’ is 1) has a boolean value of True.

Here’s the correct solution:

n = int(input("Enter a strictly positive integer: "))
steps = 0
while n != 1:
    if n % 2 == 0:
        n = n / 2
    elif n % 2 == 1: 
        n = (3*n) + 1
    steps += 1
    print(int(n))

print (steps)
Advertisement