申明: 本站飛宇網 https://feiyetopro.blogspot.com/。自網路收集整理之書籍、文章、影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]。謝謝!
沒有什麼比不停地重複做同一件事情更糟糕的了。這就是為什麼人們在失眠的時候會數綿羊,不過這個道理其實並不是因為羊這種動物會讓人昏昏欲睡。這是因為不停地重複做一件事很無聊,當你沒有關注於某些有趣的事情時,你的大腦更容易入睡。
程式師們同樣也不喜歡重複地做事情,除非他們想馬上睡著。謝天謝地,大多數程式設計語言都有一種叫for迴圈的東西,它可以自動地重複其他的程式語句和語句塊代碼等。
在這一章中,我們會學習for迴圈,以及Python所提供的另一種迴圈:while迴圈。
6.1 使用for迴圈
在Python裡,要列印五次hello,你可以這樣做:
可是這樣太囉嗦。其實你可以用for迴圈來減少需要輸入的字數和重複工作。就像這樣:
在
在這個for迴圈的例子中
- 從0開始數,在數到5之前結束。
- 對於其中每個數都把每個數位的值存放到變數x中。
然後Python會執行代碼塊
。注意在這一行前面和第
行比起來多了四個空格。IDLE應該會自動幫你縮進。
當我們在第二行的後面按下回車鍵時,Python把“hello”列印了五次。
我們也可以在print語句中用x來計算hello的個數:
如果我們再把for迴圈拿掉,代碼可能看上去就像這樣:

因此使用迴圈事實上幫我們少寫了8行額外的代碼。好的程式師不願意重複做同一件事情,因此for迴圈是程式設計語言中最常用的語句之一。
你不用非得在for迴圈中使用range或者list函數。你也可以使用一個已經創建好的列表,比如第3章中用到的採購清單,如下:

這段代碼就是說:“對於wizard_list中的每個元素,把它的值放到變數i裡,然後列印出這個變數的內容。”同樣,如果我們把for迴圈拿掉,我們就不得不這麼做:


所以這次迴圈又幫我們少打了很多字。
讓我們再建立一個迴圈。把下面的代碼輸入到Shell程式裡。它應該會自動幫你縮進代碼:
在第
行上,我們建立了一個清單,內容為 '巨大的','毛茸茸的'和'褲子'。在下麵一行
中,我們對清單中的元素進行迴圈,並把每個值都賦給變數i。在第
行和第
行中我們把變數中的內容列印了兩次。在後面的空行
按回車鍵來告訴Python這個語句塊結束了,然後代碼就會運行並把清單中的每個元素在
中列印兩次。
請記住如果你輸入的空格個數不對的話你將會得到一個錯誤資訊。如果你在上面的代碼的第

正如你在第5章中所學到的,Python期望一個語句塊前的空格數是一致的。不論你插入多少個空格,只要對每一行都用同樣的數量就行(當然這還會讓代碼更易讀)。
下面是一段更複雜一點的for迴圈的例子,它有兩個語句塊:

這些語句塊在哪裡?第一個語句塊在第一個for迴圈中:

第二個語句塊是在第二個for迴圈中的那一行print語句:

你能搞明白這一小段代碼要做什麼嗎?
在第
行先創建了一個叫hugehairypants的列表,可以看得出在下面的兩行裡會按這個清單中的元素迴圈並列印。然而,在第
行會再次對這個列表進行迴圈,這次把值賦給變數j,然後在第
行再次把每個元素列印出來。代碼
和
仍是for迴圈的一部分,也就是說for迴圈在遍歷清單時每次都會執行它們。
因此,當這段代碼運行時,我們會看到“巨大的”後面跟著“巨大的”、“毛茸茸的”、“褲子”,然後是“毛茸茸的”,後面跟著“巨大的”、“毛茸茸的”、“褲子”,等等。
把代碼輸入到Python Shell程式中自己看看結果吧:

Python進入第一個迴圈並在

的行是由print(i)語句列印的。沒有標記的行是由print(j)列印的。
與其列印這些胡言亂語,不如做些更有意義的事情。還記得在第2章裡我們做的那個算式嗎?就是如果你用爺爺的瘋狂發明複製金幣的話,在一年後你將擁有多少金幣的那個算式。它看起來是這個樣子的:
它表示發現的20枚金幣,再加上10個魔法金幣,再乘以一年的365天,減去每週被烏鴉偷走的3枚金幣。
說不定你需要看到這堆金幣的每週是如何增長的。我們可以使用另一個for迴圈。但首先,我們需要改變變數magic_coins變數的值,讓它表示每週產生魔法金幣的總個數。那就是每天10個魔幣乘以一周的7天,所以magic_coins應該是70:

我們可以看到,每週的財富增長是通過創建另一個叫作coins的變數,並使用一個迴圈:

在第
第
行有點複雜。簡單地說,每週我們要加上魔法創造的金幣個數並減去烏鴉偷走的個數。把變數coins想像成是一個裝寶貝的箱子。每一周,新的金幣都會被裝入箱子裡。所以這一行實際上的意思是:“把變數coins的內容替換成當前的金幣數加上這周新造出來的數量。”基本上,等於符號(=)相當於是一個發號施令的代碼,它命令“先計算出右邊的某個結果,然後用左邊的名字保存這個結果供以後使用。”
在第
行的print語句使用了預留位置,它在螢幕上列印出周數和到目前為止的總金幣數。(如果你看不明白,請參見前面的“在字串裡嵌入值”。)所以,如果你運行這個程式,你會看到如圖6-1所示的結果。

6.2 還有一種叫while的迴圈
for迴圈不是Python裡唯一的迴圈方式。還有while迴圈。for迴圈是針對指定長度的迴圈,而while迴圈則用於你事先不知道何時停止迴圈的情況。
想像一個樓梯有20個臺階。樓梯在室內,並且你知道爬20個臺階很容易。這就像是一個for迴圈。

接下來想像一個山坡上的樓梯。山非常高,你可能沒爬到山頂就沒力氣了,也可能天氣會突然變壞使你必須停下來。這就像是一個while迴圈。

如果你輸入並運行這段代碼,你會看到一個錯誤資訊。為什麼?這個錯誤是因為我們還沒有建立變數tired(累了)和badweather(壞天氣)。儘管這些代碼不足以真的運行起來,但它還是能給我們當作一個基本的while迴圈的例子。
我們一開始先創建一個叫step(步子,臺階)的變數。接下來,我們創建一個while迴圈,檢查變數step的值是不是小於10 000(step <10 000),那就是從山腳到山頂的總臺階數。只要臺階數小於10 000,Python就會執行其他的代碼。
我們通過print(step)列印變數的內容,然後用if tired == True:來檢查變數tired的值是否為真。(真,或者叫True,是一個布林值。我們將在第8章中學習)如果是真,我們用關鍵字break(打斷)來退出迴圈。關鍵字break用來立刻從迴圈中跳出來(或者說讓迴圈停下來),它對於for迴圈和while迴圈也同樣適用。在這裡它的作用是跳出語句塊並跳過step = step + 1那一行。
語句elif badweather == True:檢查變數badweather是否被設為真。如果是的,則用break關鍵字來退出迴圈。如果tired和badweather都不為真,那麼我們用step = step + 1的方式把變數step加1,然後繼續迴圈。
那麼while迴圈有以下幾個步驟。
1.檢查條件。
2.執行語句塊中的代碼。
3.重複。
更常見的情況是while迴圈由幾個條件組成,而不只是一個,例如:

這裡,在第

你能弄明白它是如何工作的嗎?
對於變數x我們從45開始計數,對於變數y從80開始計數,然後它們每次迴圈的執行時都增加(每個變數加1)。只要x小於50並且y小於100迴圈就會執行。在迴圈了五次後(其間每次每個變數都會加1),x的值達到了50。現在,第一個條件(x < 50)不再為真,所以Python知道是時候停止迴圈了。
while迴圈的另一個作用是創建“半永久”的迴圈。這種迴圈可能會永遠執行下去,但實際上它會繼續直到代碼中有什麼事發生,然後從裡面跳出來。下面是一個例子:

這裡對於while迴圈的條件就是True,它會永遠為真,因此語句塊中的代碼總會被執行(所以這是一個永遠的迴圈)。只有當變數some_value為真時Python才會從迴圈中跳出來。在“用randint來挑選一個亂數”裡你能看到一個更好的例子,但看這個例子之前你需要先看完第7章。
6.3 你學到了什麼
在這一章裡,我們用迴圈來執行重複的任務,這樣就不用做重複的勞動了。我們在迴圈裡面的代碼塊中告訴Python我們希望重複執行什麼任務。我們使用了兩種迴圈:for迴圈和while迴圈,它們很相似但使用方法不同。我們還使用了關鍵字break來停止迴圈,或者說跳出迴圈。
6.4 程式設計小測驗
下面是一些關於迴圈的例子,你可以自己試一試。答案可以在網站http://python-for-kids.com/ 上找到。
#1:Hello迴圈
你認為下面這段代碼會做什麼?首先猜猜會發生什麼,然後在Python裡執行一下這段代碼來看看你猜的對不對。

#2:偶數
創建一個迴圈來列印偶數,直到你的年齡為止。如果你的年紀是個奇數的話,就列印奇數直到你的年齡為止。例如,結果可能是這樣的:

#3:我最喜愛的五種食材
創建一個列表,它包含五種不同的製作三明治的材料,比如:
現在創建一個迴圈來列印這個清單(包括數字):

#4:你在月球上的體重
如果你現在正站在月球上,你的體重將只相當於在地球上的16.5%。你可以通過把你在地球上的體重乘以0.165來計算。
如果在接下來的15年裡,你每年增長一公斤,那麼在直到15年後的你每年裡訪問月球時的體重都是多少?用for迴圈寫一個程式,來列印出你每年在月球上的體重。












0 留言:
發佈留言