2 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
首先是 print(num),這樣做是為了讓代碼打印輸入的數(shù)字,因為那是序列的開始。但是,將其置于循環(huán)前端的邏輯/解釋是什么?
它被放置在原處,因為它不只是用來打印輸入的數(shù)字。每次到達代碼中的那個點時,它都會打印代碼中那個點發(fā)生的任何num
事情。在第一次迭代中,是序列的第一個元素。在第二次迭代中,現(xiàn)在是序列的第二個元素。在第三次迭代中,是第三個元素,依此類推。這將打印序列的每個元素,除了,因為循環(huán)在該點中斷,這就是為什么在循環(huán)之后有一個單獨的元素。num
num
num
print
1
print(1)
其次,對于 num = num//2 和 num = 3*num+1,為什么代碼運行只需要這些?最后,我們的目標是打印整個序列,直到輸入變?yōu)?1。我認為您需要在頂部設置一個累加器。即 lst = [] 將每個值附加到該列表中,然后返回列表。為什么只是重新標記它們 num = 工作?每次迭代時,是否不會刪除先前的值,因為它沒有存儲在任何地方?
print(num)
在計算時打印每個序列元素,因此程序不需要顯式保存元素。該程序確實忘記了以前的值,但它們已經(jīng)被打印出來了。記住打印輸出是其他工具的工作——例如,如果您使用指向文件的 stdout 運行它,打印輸出將寫入文件。
最后,為什么我們不需要以 return 結束循環(huán)?它怎么知道打印整個數(shù)字序列?它以 print(1) 結束,因為每個輸入都需要以它結束,并且它在 1 之前終止。但是,我沒有調(diào)用該函數(shù)(它是我這邊的一個函數(shù),而不僅僅是一個 while 循環(huán))來采取行動。它只是……做到了。
return
有兩個工作:結束當前函數(shù)執(zhí)行,設置返回值。如果執(zhí)行到一個函數(shù)的末尾而沒有執(zhí)行一個return
,該函數(shù)的執(zhí)行仍然結束,返回值為None
。return
不參與打印輸出。print
如上所述,這就是工作。
至于不調(diào)用該函數(shù),我們無法回答這是怎么回事。我們需要查看您實際運行的內(nèi)容,包括實際功能。

TA貢獻1921條經(jīng)驗 獲得超9個贊
這就是沒有列表的輸出“神奇地出現(xiàn)”的方式
見#1
你總是從一個函數(shù)返回......在這種情況下你沒有返回,而是打印列表
將 atime.sleep
放在那里(在你的循環(huán)內(nèi))以可視化正在發(fā)生的事情可能會有所幫助
有助于可視化代碼執(zhí)行
添加回答
舉報