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
放在那里(在你的循環內)以可視化正在發生的事情可能會有所幫助
有助于可視化代碼執行
添加回答
舉報