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循環打印一個九九乘法表。就是小學時候我們鉛筆盒蓋子內部上印刷的那種,表格形式的。