­

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

  • 2021 年 7 月 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兩個關鍵字。語法比較簡單。

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