【循環】:就是依照某些咱們編寫的特定規則,重複的作一件事。html
當你須要重複的「搬磚」的時候,能夠用for循環進行遍歷,讓機器循環的幫你去「搬磚」,完全解放咱們的雙手。python
【遍歷】:所謂遍歷,就是一遍一遍的經歷。放到程序中,就是讓程序一遍又一遍的經歷重跑同一段代碼程序的場景。和循環一個意思。git
nameList = ['小石頭', 'xing.org1^', '郭菊鋒'] for name in nameList: print(name) # 3次循環依次打印出'小石頭', 'xing.org1^', '郭菊鋒' else: print('else狀況') # else每次都會通過,當for循環執行完畢後執行else的代碼塊 print('===for循環完畢===') print(name) # 郭菊鋒
以上代碼中,咱們定義了一個列表數據nameList,而且使用for循環,依次遍歷將列表中的每一項都迭代出來。github
每次循環時,咱們定義的變量name就會被從新賦值爲nameList的對應元素,第1次循環name被賦值爲第一個元素、第2次循環name又被賦值成第二個元素。以此類推,直到nameList被循環完成或者出現跳出循環的指令(下表)後就會中止。函數
而中止循環後,變量name就是最後一個被賦值的元素,這裏爲郭菊鋒
。code
觀察上述代碼,for循環的語法格式也有必定的規律。htm
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遍歷,就能夠了。
numValue = 5 for index in range(numValue): print('5的迭代:', index) # 五次循環打印結果以下 # 5的迭代: 0 # 5的迭代: 1 # 5的迭代: 2 # 5的迭代: 3 # 5的迭代: 4
觀察可知,range範圍迭代時,從「0」開始,且不包含「5」。
從上邊例子中能夠看出來,若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。
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打印完了之後,一、2不打印。從3開始又有打印。依次規律類推...
最後,嚐嚐人類復讀機的力量吧
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、一、2
思路是:先用len獲取列表的長度,而後將計算的長度這個數字,放到range內部。
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跳出循環,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、一、2。
用for循環打印1-100
用for循環打印一個九九乘法表。就是小學時候咱們鉛筆盒蓋子內部上印刷的那種,表格形式的。