编写一个函数来执行 Collatz 猜想
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:
如何解决这个问题以获得正确的结果?
我看到两处错误:
- 在尝试使用之前永远不要定义
n
。
- 最后您再次调用该函数但不对结果执行任何操作。
听起来您只想定义 n
然后在循环中调用该函数,而不是在最后再次调用。所以像:
# no changes to the function definition
n = 3
while n != 1:
n = collatz_step(n)
print(n)
只是从语义上考虑一下...您想从 3
的值开始,然后重复更新该值的操作,直到它等于 1
。所以首先你用你想要的值定义一个变量,然后你写一个循环来更新那个值直到满足循环条件。
我被要求完成此代码的其余部分:
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:
如何解决这个问题以获得正确的结果?
我看到两处错误:
- 在尝试使用之前永远不要定义
n
。 - 最后您再次调用该函数但不对结果执行任何操作。
听起来您只想定义 n
然后在循环中调用该函数,而不是在最后再次调用。所以像:
# no changes to the function definition
n = 3
while n != 1:
n = collatz_step(n)
print(n)
只是从语义上考虑一下...您想从 3
的值开始,然后重复更新该值的操作,直到它等于 1
。所以首先你用你想要的值定义一个变量,然后你写一个循环来更新那个值直到满足循环条件。