【Python從入門到精通】(十)Python流程控制的關鍵字該怎麼用呢?【收藏下來,常看常新】

碼農飛哥發表於2021-07-18

您好,我是碼農飛哥,感謝您閱讀本文,歡迎一鍵三連哦
這篇文章主要介紹Python中流程控制的關鍵字的使用,涉及到if else,for,while等關鍵字
乾貨滿滿,建議收藏,需要用到時常看看。 小夥伴們如有問題及需要,歡迎踴躍留言哦~ ~ ~。

前言

有句話說程式就是由流程+資料結構組成。任何程式都是如此。前面花了好幾個篇幅來介紹Python中的各種資料結構,這一篇文章接著來介紹下流程控制。資料結構說白了就是用來儲存資料的,而流程就是用來控制系統的執行的。

流程控制

流程控制有三種結構,一種是順序結構,一種是選擇(分支)結構,一種是迴圈結構。
順序結構:就是讓程式按照從頭到尾的順序執行程式碼,不重複執行任何一行程式碼,也不跳過任何一行程式碼。一步一個腳印表示的就是這個意思。
選擇(分支)結構:就是讓程式根據不同的條件執行不同的程式碼,比如:根據年齡判斷某個人是否是成年人。
迴圈結構: 就是讓程式迴圈執行某一段程式碼。順序的流程這裡不做介紹了。

選擇結構(if,else):

if語句

只使用if語句是Python中最簡單的形式。如果滿足條件則執行表示式。則跳過表示式的執行。其虛擬碼是:

if 條件為真:
   程式碼塊

如果if 後面的條件為真則執行程式碼塊。否則則跳過程式碼的執行。
其流程圖是:
在這裡插入圖片描述
就是說只使用if的話,則表示式成立的話執行程式碼塊,不成立的話就結束。
下面就是一個簡單的例子,如果滿足a==1這個條件則列印a,否則跳過該語句。

a = 1
if a == 1:
    print(a)

if else語句

if else語句是if的變體,如果滿足條件的話則執行程式碼塊1,否則則執行程式碼塊2。其虛擬碼是:

if 條件為真:
   程式碼塊1
else 
   程式碼塊2

流程圖是:
在這裡插入圖片描述
同時使用if和else的話,則表示式成立的話執行一個程式碼塊,表示式不成立的話則執行另一個程式碼塊。
舉個簡單的例子吧。

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print("your age is", age)
    print('kid')

根據輸入的年齡判斷某人是否是成年人。如果age大於等於18歲,則輸出adult,否則輸出kid。

if elif else語句

if elif else語句針對的就是多個條件判斷的情況,如果if條件不滿足則執行elif的條件,如果elif的條件也不滿足的話,則執行else裡面的表示式。其虛擬碼是:

if 條件為真:
   表示式a
elif 條件為真:
   表示式b
....
elif 條件為真:
   表達是n-1
else 
   表示式n

其中elif可以有多個,但是elif不能單獨使用,必須搭配if和else一起使用
需要注意的是if,elif和else後面的程式碼塊一定要縮排,而且縮排量要大於if,elif和else本身,建議的縮排量是4個空格。同一程式碼中所有語句都要有相同的縮排。 依然是舉例說明:

bmi = 80.5 / (1.75 * 1.75)
if bmi < 18.5:
    print('過輕')
elif 18.5 <= bmi < 25:
    print('正常')
elif 25 <= bmi < 28:
    print('過重')
elif 28 <= bmi < 32:
    print('肥胖')
else:
    print('嚴重肥胖')
pass

下面就是根據bmi標準來判斷一個人是過輕,正常還是肥胖。pass是Python中的關鍵字,用來讓直譯器跳過此處,什麼都不做。

巢狀語句的使用

巢狀語句就是在一個if或者else的程式碼塊中還存在子判斷。如下例所示:

num = 23
if num < 20:
    print('不構成飲酒行為')
else:
    if 20 <= num and num < 80:
        print('已達到酒駕的標準')
    else:
        print('已經達到醉駕的標準')

迴圈的關鍵字

while迴圈語句詳解

while是作為迴圈的一個關鍵字。其虛擬碼是:

while 條件表示式:
    程式碼塊

一定要保證迴圈條件有變成假的時候,否則這個迴圈將成為一個死迴圈,即該迴圈無法結束。 其流程圖是:
在這裡插入圖片描述
如果while中的表示式成立的話則執行迴圈體,否則的話則直接結束。
舉個例子:計算從1~100的求和,這就是一個經典的運用迴圈的場景

sum = 0
n = 1
while n <= 100:
    sum = sum + n
    n = n + 1
print('sum=', sum)

執行結果是sum= 5050,這個迴圈的結束條件是n>100,也就是說當n>100是會跳出迴圈。

range函式

range函式用於生成一系列的數字,其語法結構是:

range(start,end,step)

其各部分的語法解釋是:
start表示開始的數字(包括,可以不填寫),
end 結束的數字(不包括,必須填寫),
step 步長(可以不填寫),預設是1
計算1~100的求和可以通過range函式來實現則是這樣:


sum = 0
for x in range(101):
    sum = sum + x
print(sum)
print(range(101))

執行結果是:

5050
range(0, 101)

可以看出range()函式得到的是一個range物件,必須通過for迴圈解析輸出其內容。range(101)實際執行的結果是range(0,101),預設start等於0,會輸出0~100範圍內的所有數字,不包括數字101。

for迴圈

在介紹range函式時用到了for關鍵字,這裡介紹一下for關鍵字的使用。其語法結構是:

for 迭代變數 in 字串|列表|元組|字典|集合:
    程式碼塊

字串,列表,元祖,字典,集合都可以還用for來迭代。其流程圖是:
在這裡插入圖片描述

for 迴圈就是:首先根據in 關鍵字判斷序列中是否有項,如果有的話則取下一項,接著執行迴圈體。如果沒有的話則直接結束迴圈。

range快速生成推導式

列表推導式

列表推導式的語法格式是

[表示式 for 迭代變數 in 可迭代物件 [if 條件表示式] ]

此格式中,[if 條件表示式]不是必須的,可以使用,也可以省略。下面就是輸出1~10的列表的乘積的一個例子:

L = [x * x for x in range(1, 11)]
print(L)

此表示式相當於

L = []
for x in range(1, 11):
    L.append(x * x)
print(L)

執行結果是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

來點複雜的吧,下面就是輸出

print([x for x in range(1, 11) if x % 2 == 0])

執行結果是[2, 4, 6, 8, 10]
再來點複雜的,使用多個迴圈,生成推導式。

d_list = [(x, y) for x in range(5) for y in range(4)]
print(d_list)

執行結果是:

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

上面程式碼,x是遍歷range(5)的迭代變數(計數器),因此該x可迭代5次,y是遍歷range(4)的計數器,因此該y可迭代4次。因此,該(x,y)表示式一共迭代了20次。它相當於下面這樣一個巢狀表示式。

dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))
print(dd_list)

元組推導式

元組推導式與列表推導式類似,其語法結構是:

(表示式 for 迭代變數 in 可迭代物件 [if 條件表示式] )

此格式中,[if 條件表示式]不是必須的,可以使用,也可以省略。下面就是輸出1~10的元組的乘積的一個例子:

d_tuple = (x * x for x in range(1, 11))
print(d_tuple)

執行結果是:

<generator object <genexpr> at 0x103322e08>

從上面的執行結果可以看出,使用元組推導式生成的結果並不是一個元組,而是一個生成器物件。
使用tuple()函式,可以直接將生成器物件轉換成元組。例如:

d_tuple = (x * x for x in range(1, 11))
print(tuple(d_tuple))

輸出結果是(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

字典推導式

字典推導式的語法結構是:

{表示式 for 迭代變數 in 可迭代物件 [if 條件表示式]}

其中[if 條件表示式]可以使用,也可以省略。舉個例子:

key_list = ['姓名:碼農飛哥', '年齡:18', '愛好:寫部落格']
test_dict = {key.split(':')[0]: key.split(':')[1] for key in key_list}
print(test_dict)

執行結果是:

{'愛好': '寫部落格', '年齡': '18', '姓名': '碼農飛哥'}

巢狀迴圈

巢狀迴圈就是迴圈裡面還有迴圈,最經典就是氣泡排序。氣泡排序每次比較左右相鄰的數字,如果前面的數字比後面的大則交換兩個數字的位置。下面就演示一下:

test_list = [12, 3, 1, 13, 10, 5, 9]
for i in range(len(test_list)):
    for j in range(len(test_list) - i - 1):
        if test_list[j] > test_list[j + 1]:
            tmp = test_list[j]
            test_list[j] = test_list[j + 1]
            test_list[j + 1] = tmp
    print('第{0}迴圈後的結果是='.format(str(i)), test_list)
print('最終結果是=', test_list)

執行結果是:

第0迴圈後的結果是= [3, 1, 12, 10, 5, 9, 13]
第1迴圈後的結果是= [1, 3, 10, 5, 9, 12, 13]
第2迴圈後的結果是= [1, 3, 5, 9, 10, 12, 13]
第3迴圈後的結果是= [1, 3, 5, 9, 10, 12, 13]
第4迴圈後的結果是= [1, 3, 5, 9, 10, 12, 13]
第5迴圈後的結果是= [1, 3, 5, 9, 10, 12, 13]
第6迴圈後的結果是= [1, 3, 5, 9, 10, 12, 13]
最終結果是= [1, 3, 5, 9, 10, 12, 13]

氣泡排序過程介紹:
從上面可以看出,外層迴圈負責氣泡排序進行的次數,而內層迴圈負責將列表中相鄰的兩個元素進行比較,並調整順序,即將較小的放在前面。

跳出迴圈

跳出迴圈的關鍵字有兩個,一個是continue語句,一個是break。

  1. 其中continue語句用於跳出執行本次迴圈體中剩餘的程式碼,轉而執行下一次迴圈。
n = 0
while n <= 5:
    n = n + 1
    if n == 3:
        continue
    print(n)

執行的結果是:

1
2
4
5
6

可以看到數字3被跳過了。
2. break語句用於完全終止當前迴圈,需要注意的是如果是巢狀迴圈的話,只能中斷使用break的迴圈。還是拿前面的氣泡排序來舉個例子吧!

for i in range(len(test_list)):
    for j in range(len(test_list) - i - 1):
        if test_list[j] > test_list[j + 1]:
            test_list[j], test_list[j + 1] = test_list[j + 1], test_list[j]
        if j == 2:
            print('內層迴圈break')
            break
    if i == 3:
        print('外層迴圈break')
        break

執行結果是:

內層迴圈break
內層迴圈break
內層迴圈break
內層迴圈break
外層迴圈break

可以看出內層迴圈的break不影響外層迴圈。也就是說break只會跳出當前的迴圈。

總結

本文簡單介紹了Python中流程控制的幾個關鍵字,選擇結構的話就是: if,elif,else三個關鍵字。迴圈結構的話就是while和for兩個關鍵字。語法比較簡單。

我是碼農飛哥,再次感謝您讀完本文
全網同名【碼農飛哥】。不積跬步,無以至千里,享受分享的快樂
我是碼農飛哥,再次感謝您讀完本文

相關文章