【问题标题】:Writing a function to perform Collatz Conjecture编写一个函数来执行 Collat​​z 猜想
【发布时间】:2021-11-26 03:08:53
【问题描述】:

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

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

并编写一个 while 循环,将 n 设置为 collat​​z_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:

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

【问题讨论】:

  • 错误信息非常清楚。
  • 您的意思是让while 循环以某种方式成为collatz_step 函数的一部分吗?目前还不清楚您期望 n 在那条线上有什么价值或为什么。
  • n 仅在collatz_step 函数的范围 内定义。 while 循环在该函数之外,其中确实没有定义 n
  • 我可以不这样做吗?因为我想做的是当 n 不是 1 时,在 collatz_step(n) 上运行 while 循环并打印出结果,直到 n 达到 1
  • 在进入 while 循环之前,你从未告诉 python 你想要n = 3

标签: python function while-loop collatz


【解决方案1】:

我发现有两个错误:

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

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

# no changes to the function definition

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多