【python系統學習08】for循環知識點合集

  • 2020 年 1 月 27 日
  • 筆記

for循環

目錄:

for簡介程式碼格式語法格式可被迭代的數據類型列表字典字元串不可被迭代的數據類型整數浮點值布爾值空值整數轉化為範圍後可被迭代range(y)range(x, y)range(x, y, i)Peace && Love迭代列表時獲取索引continue 跳過本次循環break 跳出循環思考題創建一個從1到100的整數列表九九乘法表

for簡介

【循環】:就是依照某些我們編寫的特定規則,重複的做一件事。

當你需要重複的「搬磚」的時候,可以用for循環進行遍歷,讓機器循環的幫你去「搬磚」,徹底解放我們的雙手。

【遍歷】:所謂遍歷,就是一遍一遍的經歷。放到程式中,就是讓程式一遍又一遍的經歷重跑同一段程式碼程式的場景。和循環一個意思。

程式碼格式

nameList = ['小石頭', 'xing.org1^', '郭菊鋒']  for name in nameList:    print(name) # 3次循環依次列印出'小石頭', 'xing.org1^', '郭菊鋒'  else:    print('else情況') # else每次都會經過,當for循環執行完畢後執行else的程式碼塊  print('===for循環完畢===')  print(name) # 郭菊鋒

以上程式碼中,我們定義了一個列表數據nameList,並且使用for循環,依次遍歷將列表中的每一項都迭代出來。

每次循環時,我們定義的變數name就會被重新賦值為nameList的對應元素,第1次循環name被賦值為第一個元素、第2次循環name又被賦值成第二個元素。以此類推,直到nameList被循環完成或者出現跳出循環的指令(下表)後就會停止。

而停止循環後,變數name就是最後一個被賦值的元素,這裡為郭菊鋒

觀察上述程式碼,for循環的語法格式也有一定的規律。

語法格式

for 元素變數 in 迭代對象:    【for子句】在程式碼塊中,位於【縮進】後邊。for子句里的內容會被循環執行。  else:    else裡邊的內容都會被執行。在for循環完畢之後執行。

可被迭代的數據類型

有哪些數據類型可以被for循環遍歷呢?

結論:列表、字典、字元串。用例子說明:

列表

for循環遍歷列表數據,可以依次列印出列表中的每一項。

列印循環的次數取決於列表中元素的個數。也就是列表的長度。

nameList = ['小石頭', 'xing.org1^', '郭菊鋒']  for name in nameList:    print(name) # 3次循環依次列印出'小石頭', 'xing.org1^', '郭菊鋒'

字典

for循環遍歷字典數據,可以依次列印出字典中的每一個鍵(key)名。

我們可以在利用字典名[key]的方式,獲取key所對應的值。

列印循環的次數取決於字典中鍵名key的個數。

dictName = {'name': '小石頭', 'nameEn': 'xing.org1^'}  for name in dictName:    print(name) # 2次循環依次列印出'name', 'nameEn'    print(dictName[name]) # 2次循環依次列印出'小石頭', 'xing.org1^'

字元串

字元串也可以被for循環遍歷,列印的將是每一個字元。

列印循環的次數取決於字元串的字元個數。

strName = 'xing.org1^'  for s in strName:    print(s)  # 循環依次列印結果如下:  # x  # i  # n  # g  # .  # o  # r  # g  # 1  # ^

不可被迭代的數據類型

整數、浮點數皆不可被迭代,如果強行遍歷會發生錯誤:

整數

整數對象不是可迭代的:

numberValue = 2020  for num in numberValue: # TypeError: 'int' object is not iterable    print(num)

浮點值

浮點數對象不是可迭代的:

floatValue = 1.23  for num in floatValue: # TypeError: 'float' object is not iterable    print(num)

布爾值

布爾對象不可迭代:

boolVal = True  for b in boolVal: # TypeError: 'bool' object is not iterable    print(b)

空值

空值對象不可被迭代:

noneVal = None  for n in noneVal: # TypeError: 'NoneType' object is not iterable    print(n)

整數轉化為範圍後可被迭代

雖然直接for循環整數,會發生錯誤。

但是如果我們利用range函數,將整數轉化為一個數字範圍,再去進行for遍歷,就可以了。

range(y)

numValue = 5  for index in range(numValue):    print('5的迭代:', index)    # 五次循環列印結果如下   # 5的迭代: 0  # 5的迭代: 1  # 5的迭代: 2  # 5的迭代: 3  # 5的迭代: 4

觀察可知,range範圍迭代時,從「0」開始,且不包含「5」。

range(x, y)

從上邊例子中可以看出來,若x不填則會默認從0開始。

如果不想從0開始呢?我們可以指定從幾開始。程式碼上可以這麼寫:

rangeValue1 = 5  for index in range(1, rangeValue1): # 明確指定從1開始    print('range:', index)    # 循環列印結果如下  # range: 1  # range: 2  # range: 3  # range: 4

可以看到另一個規律,在range括弧里,逗號前邊的數字被迭代時是包含的,右邊的不包含。即取逗號左邊而不取右邊的數字。

所以上例中,你如果想列印出「5」,那麼括弧最右邊的數字你應該至少填寫的比5大1。

range(x, y, i)

x和y,跟上邊例子一致。均是從x開始,到y但是不包括y的迭代。而i是interval的縮寫。表示間隔。既從x開始循環後,下一次的循環與上一次循環間隔多少。

文字空洞,程式碼奉上:

for index in range(0,10,3):    print('interval:', index)    # 循環列印結果如下:  # interval: 0  # interval: 3  # interval: 6  # interval: 9

從程式碼和列印結果觀察得知,依舊是從0開始循環列印。不過0列印完了以後,1、2不列印。從3開始又有列印。依次規律類推…

Peace && Love

最後,嘗嘗人類復讀機的力量吧

rangeValue2 = 5  for index in range(rangeValue2):    print('''      病毒消失,病人痊癒。武漢加油,天佑中華!    ''')    #   病毒消失,病人痊癒。武漢加油,天佑中華!      #   病毒消失,病人痊癒。武漢加油,天佑中華!      #   病毒消失,病人痊癒。武漢加油,天佑中華!      #   病毒消失,病人痊癒。武漢加油,天佑中華!      #   病毒消失,病人痊癒。武漢加油,天佑中華!      #   病毒消失,病人痊癒。武漢加油,天佑中華!

迭代列表時獲取索引

我們通過上邊迭代列表和字典的程式碼中可以看出來,for後邊的變數在迭代列表的時候是列表內的元素、迭代字典的時候則是字典裡邊的鍵名。

那麼如果我想迭代字典時,有個變數存放列表中各項所對應的偏移量(索引)呢?

通過range函數的搭配,我們不僅可以迭代整數,還能迭代列表的索引。

於是我就試了下邊的寫法,但是他報錯了。

# 迭代時傳兩個參數會報錯:  nameList = ['小石頭', 'xing.org1^', '郭菊鋒']  for name,index in nameList: # ValueError: too many values to unpack (expected 2)    print(index) 

錯誤內容ValueError: too many values to unpack (expected 2)。表示了這裡不應該有兩個參數。

那麼我們想用索引來攜帶列表時該怎麼寫呢? 一開始我給自己寫了一個bug:

nameList = ['小石頭', 'xing.org1^', '郭菊鋒']  for index in range(nameList): # TypeError: 'list' object cannot be interpreted as an integer    print(index) 

range內部只能接受整數。而列錶轉化不成整數,出點類型錯誤。

改正後,寫法如下:

nameList = ['小石頭', 'xing.org1^', '郭菊鋒']  for index in range(len(nameList)):    print(index) # 三次循環分別列印0、1、2

思路是:先用len獲取列表的長度,然後將計算的長度這個數字,放到range內部。

continue 跳過本次循環

continue跳過本次循環,for循環跳過後繼續執行下一次循環。

for i in range(5):    if(i == 3):      continue    else:      print('continue跳過循環', i)  else:    print('有continue的for循環的else')    # 列印結果如下:  # continue跳過循環 0  # continue跳過循環 1  # continue跳過循環 2  # continue跳過循環 4  # 有continue的for循環的else

可以看列印結果得知,在滿足i==3的條件之後,直接跳出了當次的循環沒有列印3這個數字。而是進入到下次循環,列印出4後,循環完畢。

然後執行了for後邊的else語句。

break 跳出循環

break跳出循環,for循環不管是否完成將直接結束。甚至for後邊的else都不會再執行。

for i in range(5):    if(i == 3):      break     else:      print('break跳過循環', i)  else:    print('有break的for循環的else')    # 列印結果如下:  # break跳過循環 0  # break跳過循環 1  # break跳過循環 2

可以看列印結果得知,在滿足i==3的條件之後,直接跳出了循環。

for循環後邊的else都沒執行。所以只列印了0、1、2。

思考題

創建一個從1到100的整數列表

用for循環列印1-100

九九乘法表

用for循環列印一個九九乘法表。就是小學時候我們鉛筆盒蓋子內部上印刷的那種,表格形式的。 【Python】循環for源程式碼地址