Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making a collatz program automate the boring stuff

Tags:

I'm trying to write a Collatz program using the guidelines from a project found at the end of chapter 3 of Automate the Boring Stuff with Python. I'm using python 3.4.0. Following is the project outline:

Write a function named collatz() that has one parameter named number. If the number is even, then collatz() should print number // 2 and return this value. If the number is odd, then collatz() should print and return 3 * number + 1. Then write a program that lets the user type in an integer and that keeps calling collatz() on that number until the function returns the value 1.

The output of this program could look something like this:

Enter number: 3 10 5 16 8 4 2 1  

I am trying to make a function that uses if and elif statements within a while loop. I want the number to print, and then return to the beginning of the loop and reduce itself to one using the Collatz sequence, with each instance of a resulting number being printed as it goes through the loop. With my current code, I'm only able to print the first instance of the number, and that number does not go through the loop after that. Following is my code:

#collatz  print("enter a number:") try:     number = (int(input())) except ValueError:           print("Please enter a valid INTEGER.")   def collatz(number):     while number != 1:          if number % 2==0:             number = (number//2)             #print(number)             return (print(int(number)))          elif nnumber % 2==1:             number = (3*number+1)              #print(number)             return (print(int(number)))          continue   collatz(number) 
like image 540
DeltaFlyer Avatar asked Nov 03 '15 20:11

DeltaFlyer


People also ask

What is the longest Collatz sequence?

My Algorithm The longest Collatz chain below five million contains 597 elements (and starts with 3732423). A brute-force algorithm solves this problem within a half a second. A smarter approach is to cache all chain lengths we encounter along the way.

Is the Collatz sequence an algorithm?

The Collatz sequence, also called the Hailstone sequence, is a sequence of numbers relevant to the Collatz conjecture, which theorizes that any number using this algorithm will eventually be reduced to 1.


1 Answers

def collatz(number):      if number % 2 == 0:         print(number // 2)         return number // 2      elif number % 2 == 1:         result = 3 * number + 1         print(result)         return result  n = input("Give me a number: ") while n != 1:     n = collatz(int(n)) 

Output:

Give me a number: 3 10 5 16 8 4 2 1  Give me a number: 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
like image 177
Nuncjo Avatar answered Sep 17 '22 15:09

Nuncjo