【发布时间】:2020-05-14 13:10:44
【问题描述】:
我是一名全新的编程研究生,遇到了一些麻烦。我正在解决一个教科书问题,希望我取一个正整数并打印该数字的 Collatz 序列。
while num !=1:
print(num)
if num%2==0:
num = num//2
else:
num = 3*num+1
print(1)
现在,此代码有效。我得到了数学逻辑。但是有些地方我不明白。
首先是 print(num),这样做是为了让代码打印输入数字,因为这会启动序列。但是,将这个放在循环前面的逻辑/解释是什么?
其次,对于 num = num//2 和 num = 3*num+1,为什么代码运行只需要这些?最后,我们的目标是打印整个序列,直到输入变为 1。我认为您需要一个累加器。即 lst = [] 将每个值附加到该列表中,然后返回该列表。为什么只是重新标记它们 num = 工作?每次迭代,不会把之前的值删除,因为它没有存储在任何地方吗?
最后,为什么我们不需要以 return 结束循环?它怎么知道打印整个数字序列?它以 print(1) 结尾,因为每个输入都需要以它结尾,并且它在 1 之前终止。但是,我没有调用该函数(它是我这边的一个函数,而不仅仅是一个 while 循环)来采取行动。它只是……做到了。
如果这有点令人困惑,我很抱歉,但我正在尝试理解正确的代码答案。我大部分时间都在做累加器之类的东西,所以我不确定为什么不需要累加器,num = 做了什么,以及如何用 print(1) 结束它并出现整个序列。
【问题讨论】:
-
过去几个小时内的第二个 collatz 问题 o.O ...
-
哇,一个“解释这段代码”的问题,实际上给我们详细解释了你对代码不了解的地方。这真的很少见!
标签: python