寫程式最重要的目標就是讓重複的工作交給電腦去執行,解放雙手和精力去做重複的事情,今天要介紹的迴圈就是可以讓電腦重複執行程式直到條件結束的方式。
一、基本介紹
這邊我喜歡用中文來翻譯這個程式的意思,在理解過程中我會這樣去理解他,從範圍 內取出第一個數值當作變數, 接下來對變數 進行操作。
for 變數的名稱 in range(範圍):
對變數進行操作
二、範例
1.從字典中取出成績
先看一下完整的程式碼,首先先建立我們的資料,也就是班上成績,利用大括弧{}來建立字典,接下來有三個做法取出成績,第一個是迴圈,第二個是土法煉鋼全部print出來,第三個是使用字典的語法,我們先從第一個看起。
1-1:
這邊可以利用我剛剛所說的用中文的方式去理解,從範圍 range ( len ( list (class_grade.keys()))) 中取出第一個值叫做變數 i , 接下來對變數 i進行操作。
我們先看到範圍裡面的class_grade.keys()這代表取出所有class_grade中所有的key,會得到這個結果:
接下來利用列表list(),將他轉換成列表:
list(class_grade.keys())的終端機
再利用len()來計算長度,也就是有幾位學生,會得到10,因為有10為位學生
接著range()就會知道是range(10),也就是說目前的程式碼變成for i in range(10),從範圍10內取出第一個當作變數i,變數i就會是從零到九(0,1,2,3.....,9)。
接著我們看到迴圈內部我們要對變數i進行什麼操作:
先看到第一部分class_grade就是我定義的學生成績字典,要從字典中拿出第一個成績,我要輸入的是class_grade[學生的名字]
那我要如何取得學生的名字呢?
就從第二部分中剛剛建立的學生名字列表取出,但我一次只要取出一個名字,所以我利用索引[i],索引[0]代表取出列表中的第一個,不清楚地可以回去看前面幾集的
PYTHON格式化輸出 這篇。
1-2
如果說我們不使用迴圈,也能達到一樣的效果,但就必須一字一句的將要輸出的內容打出來,這裡會遇到一個新手寫程式最容易犯的錯,就是重複性太高,如果這時候我要輸出的是別班的成績,會因為同學名字不同,整個程式碼要進行大修改,如果程式碼無法擁有重複使用的特性,那直接將成績用鍵盤打出還會比寫出程式碼來的快速。
1-3
利用字典的函數可以快速取出所有值,但對於接下來要進行最大值最小值,或是平均的計算不太好用。
2.找出質數
這裡使用到了雙重迴圈也就是巢狀迴圈
首先看外面的迴圈,假設我輸入的數值是10(N = 10),從範圍2~10(數值是11但python是取到10),將第一個數質設為變數i(此時i=2),
接下來進入第二個迴圈,從範圍2~i,將第一個數質設為變數n(此時n=2)
進入迴圈內部,如果n % i 是0的話跳出,%取餘數的意思
而這裡會看到else跟if在不同的階層,這是python特殊的用法,for 和下次會提到也是迴圈用法的while也可以像if有else,當迴圈沒有中斷會繼續執行else,但如果中斷了就會跟著break一起直接跳出
這裡算是迴圈的進階題,可以多看幾次來確保自己的邏輯正確
三、特殊用法
1.單行 可以將for 寫成單行讓程式碼看起來更簡潔,將上一個找質數的例子用在這裡,最後還要進行一兩個列表的差集,我個人是不會使用這樣的方式來寫程式碼,因為我覺得沒有那麼的直覺,所以這方面可以自由斟酌,如果是簡單得迴圈就可以使用
2.反向處理 使用reversed可以迴圈從後方的值,倒回來處理,也可以自行處理,就像是第二個方法一樣
3.新增索引值 使用enumerate可以將list新增索引值
四、結論
for迴圈可以說是基礎中的基礎,但它可以做到的事,已經超過基礎的範圍,在這章節的範例有簡單也有比較困難的,進入下一章節前弄明白才不會對PYTHON累積太多的疑問,可以多做練習熟悉操作