迴圈語法
迴圈結構
迴圈結構是使用while
、for
迴圈語句的結構,可以減少冗餘程式碼,提升程式碼的效率。
while 迴圈
while
迴圈,while
迴圈的使用if
的基本相同,在while
之後使用表示式,如果表示式為真,就會反覆執行while
迴圈程式碼塊的作用域,每執行完一次就重新判斷while
的表示式,真就重複上述步驟,直到表示式為假才會跳出;如果一開始就是假,直接跳過。
while expression:
code0
code1
...
# 輸出1 ~~ 100 的數字,並計算出它們的和
num = 1 # 數字
sum_up = 0 # 計算和
count = 100 # 迴圈的次數
while count: # 判斷count的值,如果為0就跳出迴圈
print(num) # 輸出數字
sum_up += num # 計算他們的和
num += 1 # 數字自增
count -= 1 # 次數自減
print('和:', sum_up) # 迴圈結束,輸出他們的和
死迴圈
只要while迴圈的條件表示式一直為真,相應的作用域就會一直執行,無法跳出,形成死迴圈。死迴圈時迴圈無法跳出,迴圈語句之後的程式碼也不會執行。
while True :
print('死迴圈')
print('跳出迴圈') # 永遠無法跳出迴圈
關鍵字的使用
我們來講三個很重要的關鍵字:pass
、break
、continue
pass
意思是過、佔位符。本身是個空語句,沒有任何含義,不會做任何的事情,只是為了保持程式結構的完整性二佔據一些必要的位置。
要注意區分None
和pass
的區別,None
的意思是什麼都沒有,但是也一層布林為假的含義;而pass
是一點意義都沒有,只是為了佔據一些位置放置出錯而已,更多的情況是用來程式的開發中使用,正式上線是很難看到這個關鍵字的。
# 程式碼塊中必須有作用域,否則出錯,但是我現在不想執行任何東西,怎麼辦?
if True:
pass # 使用pass佔位
while True:
pass # 使用pass佔位
break
只能用於迴圈語句當中,比如while
、for
,只要出現這個關鍵字,迴圈立即中斷,並跳出迴圈,迴圈作用域中未執行的程式碼也不會執行,即使是迴圈語句的條件表示式尚未為假,也會立刻停止執行。
count = 10
while count:
count -= 1
if count == 6:
break
print(count)
'''
結果:
9
8
7
'''
continue
只能用於迴圈語句當中,注意和break
的區別,continue
是跳過當前的迴圈語句,然後繼續迴圈的執行。
count = 10
while count:
count -= 1
if count == 6:
continue
print(count)
'''
結果:
9
8
7
5
4
3
2
1
0
'''
for迴圈語句
作用
迴圈、遍歷、迭代。for迴圈的主要作用是可以遍歷迭代可迭代物件。將遍歷可迭代物件中的資料元素此一個一個依次提取出來,然後執行程式碼塊中的程式碼,直到遍歷結束。
遍歷型別
可迭代物件:容器型別資料、range()函式、迭代器。
# for …… in 中間的變數是可迭代物件中的元素資料。
for 變數 in 可迭代物件:
code2
code1
...
# 將一個容器中的資料遍歷出來,所有的容器都是可迭代物件
container = 'hello motherland'
for i in container:
print(i)
遍歷字典只會遍歷出字典的鍵
dctvar = {'one': 1, 'two': 2, 'three': 3}
for i in dctvar:
print(i)
'''
結果;
one
two
three
'''
遍歷多級容器,我們就需要巢狀使用for迴圈
var = [[1, 2, 3, 4, 5], [12, 34, 56, 67, 84, 55]]
for i in var:
for j in i:
print(j)
變數的解包
對於容器,我們可以直接使用同等長度數量的變數直接將容器中的資料提取出來。
# 所有容器都支援
a, b, c, d, e = 'hello'
print(a, b, c, d, e)
a, b = ['hello', 'motherland']
print(a, b)
a, b = {'one': 1, 'two': 2} # 解包字典獲取的是字典的鍵
print(a, b)
'''
結果:
h e l l o
hello motherland
one two
'''
所以遍歷等長的多級容器的時候就可以利用變數的解包這一特性,快速遍歷容器,儘量的避免迴圈的巢狀使用,因為迴圈巢狀是十分消耗計算機資源的。
var = [[1, 2, 3, 4, 5], [12, 56, 67, 84, 55]]
for a, b, c, d, e in var:
print(a, b, c, d, e)
'''
結果:
1 2 3 4 5
12 56 67 84 55
'''
range()物件
range函式是一個可迭代物件,可以按照順序返回一些數字,可以配合for將一些複雜的工作簡化。
語法:
range([start_number], stop_number, step_number)
range([開始值], 結束值, [步長])
range的三個引數都是整型數字,range有三種使用方法
-
輸入一個引數,這個參數列示結束值,返回的結果是
0 ~~ N-1
for i in range(5): print(i) ''' 結果; 0 1 2 3 4 '''
-
輸入兩個引數,第一個引數S是開始值,第二個引數N是結束值,返回
S ~~ N-1
。for i in range(-3, 2): print(i) ''' 結果: -3 -2 -1 0 1 '''
-
輸入三個引數,第三個參數列示步長,意思是數值的增長按照步長的大小來依次返回。
# 從2開始,數字按照3來增長,預設是1 for i in range(2, 10, 3): print(i) ''' 結果: 2 5 8 '''
倒數
for i in range(5, 0, -1): print(i) ''' 結果: 5 4 3 2 1 '''
總結
while
迴圈一般使用再較為浮躁的邏輯當中;for
迴圈一般就是用於資料的遍歷。但是它們兩個之間的本質是相同的。