作者:許立軒
簡介:
這是一個Python
計算機語言由淺入深的教學;
如果您是計算機「小白」, 您可以跟着教學一步一步地瞭解到Python
是什麼、能做什麼;
如果您是久經沙場的極客
,您也可以從中有所收穫 :)
視訊地址:https://www.bilibili.com/video/BV1LC4y1t7ua/
請用python算出1+2+3的和
>>> 1+2+3
6
so easy
請再用python算出1+2+3.......+10的和
>>> 1+2+3+4+5+6+7+8+9+10
55
請再用python算出1+2+3.......10000的和
所以這時候,回圈就派上用場了!
在python中,有兩種回圈,它們分別是for
回圈與while
回圈
for
回圈的格式是for 變數名 in 可迭代物件
在python的基本數據型別中,字串str
、列表list
、元組tuple
、集合set
、字典dict
這5個皆爲可迭代型別(物件),也就是說,我們可以通過for...in
回圈來遍歷其內成員(元素)
# 遍歷字串
for s in 'abc':
# 字串內的每一個字元'a'、'b'、'c'都會依次賦值給變數s
print(s)
# 遍歷列表
for i in [1,2,3]:
# 列表內的成員1、2、3會依次賦值給變數i
print(i)
# 遍歷元組、集合的效果和遍歷列表基本一致,就不舉例了
pass
# 與其它基本數據型別不一樣,遍歷字典時,會把字典的鍵賦值給變數,而不是字典的值
d = {'a':1, 'b':2}
for k in d:
print(k) # 依次列印a與b
print(d[k]) # 通過鍵獲取對應的值
# 可以通過字典的values方法,直接遍歷字典的值
for v in d.values():
print(v) # 依次列印1、2
# 可以通過字典的keys方法,遍歷字典的鍵,這裏與直接遍歷字典的效果是一樣的
for k in d.keys():
print(k) # 依次列印a與b
# 可以通過字典的items方法,同時遍歷字典的鍵與值
for k, v in d.items():
print(k,v) # 先列印a與1,再列印b與2
這裏您可能不理解items那一段是什麼鬼,這裏涉及到python變數解包
的知識
# 在<再論變數>一章中,我們學過多個變數的賦值
a, b = 1, 2
print(a, b) # 1 2
# ok, 沒問題
# 在<基本數據型別>那一章中,我們知道1,2這樣會被python直譯器當作是元組
c = 1, 2
print(c) # (1, 2)
print(type(c)) # <class 'tuple'>
# 所以一開始的a,b=1,2等價於
a, b = c
print(a, b) # 1 2
這就叫變數解包,我們知道了多個變數賦值的真相!
通過內建函數list
,我們可以將可迭代物件轉化爲列表
d = {'a':1, 'b':2}
e = list(d.items())
print(e) # [('a', 1), ('b', 2)]
# 看到了嗎
# 一個列表裏,每個元素都是一個長度爲2的元組
# 這樣試試
for both in e:
print(both) # 先列印('a', 1),再列印('b', 2)
# 加上我們的變數解包呢?
for key, value in e:
print(key,value)
# ok,現在明白了
內建函數range
是for
回圈的好基友,range是Range Rover(路虎)的range,它中文意思是一段範圍,我們可能暫時玩不起Range Rover,但是我們必須得把range給玩溜了,才能 纔能玩好for回圈
range函數有兩種格式,它們都返回一個可迭代物件
range(stop) -> range object
range(start, stop[, step]) -> range object
直接上例子
# 只給一個參數,表示結束位置(不包含),它表示[0~結束位置)這段範圍
print(list(range(3))) # [0, 1, 2]
# 傳入兩個參數,第一個參數表示起始位置(包含),第二個參數表示結束位置(不包含),它表示[起始位置~結束位置)這段範圍
print(list(range(1, 6)) # [1, 2, 3, 4, 5]
# 傳入三個參數,第一、二個參數和上面一樣,第三個表示步長,即每次跨多少步
# 當傳入兩個參數時,步長預設爲1
# 下面 下麪表示範圍從[1~10],步長爲2,所以得到了1到10內所有奇陣列成的列表
print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]
# 與for回圈配合
for i in range(3):
print(i) # 依次列印0~2
所以1+2+3.......10000的和,我們可以通過for與range的配合求出
# 一開始將總數設爲0
sum = 0
for num in range(1, 10001):
# 將1~10000的每個數累加到sum上
sum = sum + num
print(sum) # 50005000
解放雙手,美滋滋!
我們再通過觀察for回圈的每一步走向來更深一步瞭解它
內建函數enumerate
作用於可迭代物件,比如利用它,可以同時遍歷列表的數據和數據的下標(索引)
函數的格式長這樣
enumerate(iterable, start=0)
直接上例子
a = ['a', 'b', 'c']
for index, data in enumerate(a):
print(index, data)
# 順序列印
# 0 a
# 1 b
# 2 c
將列表傳給函數enumerate後,它的返回值和字典的items方法返回值有點像
a = ['a', 'b', 'c']
b = enumerate(a)
# 利用內建函數list將可迭代物件轉爲列表看看
print(list(b)) # [(0, 'a'), (1, 'b'), (2, 'c')]
將enumerate的返回值轉成列表後,可以看出,這是所有元素都是長度爲2元組的列表,其中,元組第一個值爲列表元素的下標,第二個值爲對應的元素
第二種回圈叫做while
,它的格式長下面 下麪這樣
while 條件:
語句1
...
語句N
當條件滿足時,將不斷回圈執行程式碼塊內容,直至條件不滿足時正常退出回圈
比如同樣計算1+2+3.......10000的和,用while回圈的話,可以這樣
sum = 0
num = 1
while num <= 10000:
sum = sum + num
num = num + 1
print(sum) # 50005000
通過動畫來看流程是這樣的
至今爲止,無論是for回圈還是while回圈,它的結束都是正常結束的,要麼可迭代物件已迭代完畢退出,要麼條件不滿足退出
我們可以通過break
語句來主動退出回圈
當while的條件爲真時,將進行下一次回圈,如果while的條件永遠是True的話,就變成了死回圈,像下面 下麪一樣
while True:
print('你好帥啊')
如果您有耐心,機器將會日夜不停地讚美您,如果您感到厭煩,可以通過按鍵Ctrl
+C
來終止它
利用break語句,當讚美了兩次後,主動退出回圈
times = 0
while True:
if times == 2:
# 當times變數等於2時,break退出回圈
break
print('你好帥啊')
times = times + 1
print('謝謝,但是地球人都知道')
跳過當前回圈用continue
語句,它表示繼續的意思,當在回圈中遇到continue
後,其後的語句不會執行,而是繼續下一次回圈
例如,當數位等於2時,不進行列印
for i in range(1, 4):
if i == 2:
# 遇到continue後,其後的語句不會執行,而是繼續下一次回圈
continue
print(i)
通過動畫來看流程是這樣的
話說"花心"的else
不但可以與if
條件語句進行搭配,它還可以與回圈進行搭配,所以我們揭開了兩種回圈的面紗,看到了它們的最終面貌
for回圈
for <variable> in <sequence>:
<statements>
else:
<statements>
while回圈
while <expr>:
<statements>
else:
<statements>
else
下的程式碼塊只會在回圈正常退出時執行,所謂正常退出,是指非break主動退出回圈的情況下,回圈正常結束退出
我們在回圈中通過動畫看兩種回圈結束情況的執行邏輯
1.正常結束回圈
2.break主動結束回圈
熟練掌握條件判斷語句與回圈語句,將讓您的程式更有邏輯性