编写一个函数来执行 Collat​​z 猜想

Writing a function to perform Collatz Conjecture

我被要求完成此代码的其余部分:

def collatz_step(n):
    if n % 2 == 0:
        return n // 2 

并编写一个 while 循环,将 n 设置为 collatz_step 给出的下一个值,直到它达到 1,并在每一步打印 n 的值。

我按如下方式完成,应该得到 10, 5, 16, 8, 4, 2, 1

def collatz_step(n):
    if n % 2 == 0:
        return n // 2
    else:
        return 3*n + 1

while n != 1:
    n = collatz_step(n)
    print(n)

collatz_step(3)

但是我收到一条错误消息说 'n' 没有定义?这部分具体来说,

while n != 1:

如何解决这个问题以获得正确的结果?

我看到两处错误:

  1. 在尝试使用之前永远不要定义 n
  2. 最后您再次调用该函数但不对结果执行任何操作。

听起来您只想定义 n 然后在循环中调用该函数,而不是在最后再次调用。所以像:

# no changes to the function definition

n = 3
while n != 1:
    n = collatz_step(n)
    print(n)

只是从语义上考虑一下...您想从 3 的值开始,然后重复更新该值的操作,直到它等于 1。所以首先你用你想要的值定义一个变量,然后你写一个循环来更新那个值直到满足循环条件。