When I run the following code:
def collatz(number):
if number % 2 == 0:
return number // 2
result = number
print(number)
elif number % 2 == 1:
return 3 * number 1
result = number
print(number)
n = input('Enter a number: ')
while n != 1:
n = collatz(int(n))
the code runs to get the number to 1, but it always seems to skip the lines
result = number
print(number)
because it does not show any output. But when I visualize it, it is running the number to one. Could someone help explain why that is happening? Thanks so much.
CodePudding user response:
You are using a recursive loop that bypasses those two statements.
def collatz(number):
if number % 2 == 0:
return number // 2 <---- exits function here
result = number
print(number)
elif number % 2 == 1:
return 3 * number 1 <---- exits function here
result = number
print(number)
The same concept applies if you have the following function.
def add(x,y):
return x y
print(x)
You would never get to the print(x) statement as you are exiting the function before that line of code!
CodePudding user response:
You need to remove the return statement. Return exits the collatz function immediatly.
CodePudding user response:
this is because it returns the value and it doesn't continue after the return, so you could do:
def collatz(number):
if number % 2 == 0:
result = number / 2
print(result)
return result
elif number % 2 == 1:
result = 3 * number 1
print(result)
return result
n = input('Enter a number: ')
while n != 1:
n = collatz(int(n))
CodePudding user response:
When a function sees return it ends immediately and outputs the value after the word. So to get the lines to run, they need to be before the word return:
def collatz(number):
if number % 2 == 0:
result = number
print(number)
return number // 2
elif number % 2 == 1:
result = number
print(number)
return 3 * number 1
n = input('Enter a number: ')
while n != 1:
n = collatz(int(n))
