简体   繁体   English

Python:程序运行良好但跳过代码中的 output 行

[英]Python: Program running fine but skipping over output lines in code

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代码运行以使数字变为 1,但它似乎总是跳过这些行

result = number
print(number)

because it does not show any output.因为它没有显示任何 output。 But when I visualize it, it is running the number to one.但是当我想象它时,它正在运行数字到一。 Could someone help explain why that is happening?有人可以帮助解释为什么会这样吗? Thanks so much.非常感谢。

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))

When a function sees return it ends immediately and outputs the value after the word.当 function 看到return时,它会立即结束并在单词之后输出值。 So to get the lines to run, they need to be before the word return :所以要让这些行运行,它们需要在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))

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.如果您有以下 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!当您在该行代码之前退出 function 时,您永远不会进入 print(x) 语句!

You need to remove the return statement.您需要删除return语句。 Return exits the collatz function immediatly. Return 立即退出collatz z function。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM