famguy74 famguy74 - 1 year ago 56
Python Question

Python: Counting number of steps till a number gets to 1

The goal of this function is to count the number of steps it takes a number to get to 1 after performing operations. The number you put into the function is divided by 2 if the number is even, and tripled and increased by 1 if the number is odd. These operations are performed on the number until it reaches one. For example, if you start out with the number 3 it would go through these steps: 3 >10 >5 >16 >8 >4 >2 >1 the function would need to return the number "8" because it took 8 steps for 3 to get to 1 after dividing even numbers and multiplying by 3 and adding 1 to odd numbers.

Here is my code so far. I understood how to have my function return the first step (Example: I could have 3 return 10 and 6 return 3) but I can't figure out how to have my function count the number of steps it took to reach 1.

def collatz_counts(n):
total = 0
while n > 1:
if n % 2 == 0:
n =(n // 2)
total += 1

elif n % 2 == 1:
n = (3 * n + 1)
total += 1
return total

Answer Source

You need to adjust the code to make it return after the while loop. Otherwise, it will return too early if it meet odd number.

Additionally, total += 1 is done in both case; you can move it out of if .. elif .. block.

def collatz_counts(n):
    total = 0
    while n > 1:
        if n % 2 == 0:
            n =(n // 2)
        elif n % 2 == 1:
            n = (3 * n + 1)
        total += 1  # <---
    return total  # <---

BTW, collatz_counts(3) will return 7. You need to adjust initial total value to 1 to get 8.