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)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…