2 回答
TA贡献2041条经验 获得超4个赞
首先是 print(num),这样做是为了让代码打印输入的数字,因为那是序列的开始。但是,将其置于循环前端的逻辑/解释是什么?
它被放置在原处,因为它不只是用来打印输入的数字。每次到达代码中的那个点时,它都会打印代码中那个点发生的任何num
事情。在第一次迭代中,是序列的第一个元素。在第二次迭代中,现在是序列的第二个元素。在第三次迭代中,是第三个元素,依此类推。这将打印序列的每个元素,除了,因为循环在该点中断,这就是为什么在循环之后有一个单独的元素。num
num
num
print
1
print(1)
其次,对于 num = num//2 和 num = 3*num+1,为什么代码运行只需要这些?最后,我们的目标是打印整个序列,直到输入变为 1。我认为您需要在顶部设置一个累加器。即 lst = [] 将每个值附加到该列表中,然后返回列表。为什么只是重新标记它们 num = 工作?每次迭代时,是否不会删除先前的值,因为它没有存储在任何地方?
print(num)
在计算时打印每个序列元素,因此程序不需要显式保存元素。该程序确实忘记了以前的值,但它们已经被打印出来了。记住打印输出是其他工具的工作——例如,如果您使用指向文件的 stdout 运行它,打印输出将写入文件。
最后,为什么我们不需要以 return 结束循环?它怎么知道打印整个数字序列?它以 print(1) 结束,因为每个输入都需要以它结束,并且它在 1 之前终止。但是,我没有调用该函数(它是我这边的一个函数,而不仅仅是一个 while 循环)来采取行动。它只是……做到了。
return
有两个工作:结束当前函数执行,设置返回值。如果执行到一个函数的末尾而没有执行一个return
,该函数的执行仍然结束,返回值为None
。return
不参与打印输出。print
如上所述,这就是工作。
至于不调用该函数,我们无法回答这是怎么回事。我们需要查看您实际运行的内容,包括实际功能。
TA贡献1921条经验 获得超9个赞
这就是没有列表的输出“神奇地出现”的方式
见#1
你总是从一个函数返回......在这种情况下你没有返回,而是打印列表
将 atime.sleep
放在那里(在你的循环内)以可视化正在发生的事情可能会有所帮助
有助于可视化代码执行
添加回答
举报