天天看點

Python的程式控制結構

作者:但求無Bug

一、概述

對于程式設計語言而言,必然會存在對應的程式控制結構。常見的程式控制結構有三種,分别為:順序結構、分支結構和循環結構。對于順序結構而言,程式會按照語句聲明的順序依次執行。而分支結構則是按照某種條件選擇對應的分支執行;循環則是按某種條件重複執行某些語句。

二、代碼塊

在說程式控制結構前先簡單說一下Python中的代碼塊。所謂代碼塊是指使多條語句在邏輯上被當作一個整體的文法。對于大多數程式設計語言,如:Java、js等,代碼塊都使用"{"和"}"進行包裹,而在Python中則有些許不同,其使用":"結尾,而邏輯上被看作整體的多條語句則需進行縮徑。至于縮徑的字元則無所謂,但同一個代碼塊的語句必須縮徑相同。從這點來看,則與yaml文法有些相似。

下面給出一個代碼塊例子:

# if代碼塊
if 條件:
    語句1
    語句2
# 循環代碼塊
while 循環條件:
    語句1
    語句2           

三、分支結構

對于Python而言,分支結構有if和switch兩種。當然,switch分支結構是在Python3.10版本才開始支援。若使用的版本早于該版本,則無法使用switch功能。

3.1 If分支結構

對于If分支結構而言,其又分為多個類型,分别為:if、if-else、if-elif-else等。

3.1.1 if

if會根據指定的條件來決定是否執行對應分支的語句。若條件滿足,則執行;若不滿足,則忽略。其文法格式為:

if 條件:
    語句1
    語句2           

下面給出示例:

age = int(input("請輸入您的年齡:"))
if age >= 18:
    print("年齡已滿18,屬于成年人")
print("程式執行完畢")           

若輸入的值大于等于18,則會列印if代碼塊中的語句,如下:

Python的程式控制結構

若輸入的值小于18,則不會列印if代碼塊中的語句,如下:

Python的程式控制結構

3.1.2 if-else

對于if-else而言,當if指定的條件滿足時,則執行if下的代碼塊;若不滿足,則執行else下的代碼塊。其文法格式為:

if 條件:
    執行語句1
else:
    執行語句2           

下面給出對應的例子:

age = int(input("請輸入您的年齡:"))
if age >= 18:
    print("年齡已滿18,屬于成年人")
else:
    print("年齡未滿18,屬于未成年人")
print("程式執行完畢")           

當輸入的數字大于18時,會輸出"年齡已滿18,屬于成年人",如下:

Python的程式控制結構

當輸入的數字小于18時,會輸出"年齡未滿18歲,屬于未成年人",如下:

Python的程式控制結構

3.1.3 if-elif-else

對于if-elif-else而言,會首先判斷if的條件是否滿足,若滿足則執行if下的語句,若不滿足,則開始判斷elif指定的條件,滿足時執行elif下的語句,不滿足則繼續判斷下一個elif指定的條件。如此循環往複,若判斷完所有的elif條件後無法滿足,則執行else下的語句。其文法格式為:

if 條件1:
    文法1
elif 條件2:
    文法2
    ...
else:
    文法n           

下面給出對應的例子:

score = float(input("請輸入您的成績:"))
if 90 < score < 100:
    print("A")
elif score > 80:
    print("B")
elif score > 60:
    print("C")
else:
    print("D")           

執行結果如下:

Python的程式控制結構

3.1.4 if嵌套

if分支結構可進行嵌套,當存在嵌套時,會先判斷外層if的條件,當外層條件滿足時,會再次判斷内層if指定的條件,當兩者均滿足時,才會執行真正的邏輯判斷。其文法格式為:

if 外層條件:
    語句1
    if 内層條件:
        語句2           

下面給出對應的例子:

username = input("請輸入使用者名:")
password = input("請輸入密碼:")
if username == "admin":
    if password == "123456":
        print("驗證通過")
    else:
        print("密碼錯誤,請驗證密碼是否正确!")
else:
    print("您不是管理者,無法進行登入")           

當輸入的使用者名為system時,會提示"您不是管理者,無法進行登入",如下:

Python的程式控制結構

當輸入的使用者名為"admin",密碼為"123"時,會提示"密碼錯誤,請驗證密碼是否正确!",如下:

Python的程式控制結構

當輸入的使用者名為"admin",密碼為"123456"時,提示"驗證通過",如下:

Python的程式控制結構

3.1.5 三目運算

對于Python而言,也提供了三目運算符,其格式為:

條件成立時執行的表達式 if 條件 else 條件不成立時執行的表達式           

從格式來看,這與Java有所不同,Java中的三目表達式的 格式:

條件 ? 條件成立時執行的表達式 :條件不成立時執行的表達式           

下面為對應的例子:

age = int(input("請輸入年齡:"))
message = "已滿18歲,屬于成年人" if age >= 18 else "未滿18歲,屬于未成年人"
print(message)           

當輸入的值大于或等于18時,會提示"已滿18歲,屬于成年人", 如下:

Python的程式控制結構

當輸入的值小于18時,會提示"未滿18歲,屬于未成年人",如下:

Python的程式控制結構

3.2 Switch分支結構

對于switch分支結構而言,大部分程式設計語言都會支援,但對于Python而言,直到Python3.10版本起,才開始支援該分支結構。當然,在Python中使用的關鍵字并非switch,而是match。其格式為:

match 表達式:
    case 值1:
        執行語句
    case 值2 | 值3 :
        執行語句
        ...
    case _:
        預設語句           

需要說明的是,Python則是用case _作為預設時的情況,而非像其他語言的switch使用default來聲明。當然,其存在很多模式,且不存在case穿透的情況。

下面給出對應的例子:

season = "spring"
match season:
    case "spring":
        print("春季")
    case "summer":
        print("夏季")
    case "autumn":
        print("秋季")
    case "winter":
        print("冬季")
    case _:
        print("無效的季節")           

執行結果如下:

Python的程式控制結構

當然,對于match而言,有很多種使用模式,這裡就不再過多提及。

四、循環結構

對于Python的循環結構而言,其共有兩種,分别是:while循環和for循環。這與Java有所不同。在Java中,while循環有while和do-while之分,for循環也有普通for循環和for-each循環之分。但是,在Python就隻有while循環和for循環。

4.1 while循環

while循環的文法格式如下:

while 條件:
    語句1           

下面給出幾個例子來示範一下while循環的使用。

  • 計算1-100的累加和

對應的例子如下:

result = 0
i = 1
while i <= 100:
    result += i
    i += 1
print("100内的所有數字之和為:", result)           

執行結果如下:

Python的程式控制結構
  • 擷取100以内的所有偶數

對應的例子如下:

result = []
i = 1
while i <= 100:
    if i & 1 == 0:
        result.append(i)
    i += 1
print("100内的所有偶數為:", result)           

執行結果如下:

Python的程式控制結構
  • 求100以内的所有素數

對應的例子如下:

result = []
i = 2
while i <= 100:
    j = 2
    while j <= (i / j):
        if not i % j:
            break
        j += 1
    if j > (i / j):
        result.append(i)
    i += 1
print("100内的所有偶數為:", result)           

執行結果如下:

Python的程式控制結構

4.2 for循環

for循環的文法格式如下:

for 臨時變量 in 序列:
    循環執行語句           

下面還是使用上面的幾個例子來示範for循環的使用。

  • 計算1-100的累加和

對應的例子如下:

result = 0
for i in range(1, 101, 1):
    result += i
print("100之内所有數之和為:", result)           

執行結果如下:

Python的程式控制結構
  • 擷取100以内的所有偶數

對應的例子如下:

result = []
for i in range(1, 101):
    if i & 1 == 0:
        result.append(i)
print("100内的所有偶數為:", result)           

執行結果如下:

Python的程式控制結構
  • 求100以内的所有素數

對應的例子如下:

result = []
for i in range(2, 101):
    j = 2
    for t in range(2, (i // j) + 1):
        if not i % t:
            break
        j = t
    if j > i / j:
        result.append(i)
print("100内的所有偶數為:", result)           

執行結果如下:

Python的程式控制結構

當然,for循環最主要的作用還是用來周遊序列,如下面的例子:

# 周遊清單
print("開始周遊清單:")
listData = ["Tom", "Jerry", "Spike"]
for item in listData:
    print(item, end="\t")

# 周遊集合
print("")
print("開始周遊集合:")
setData = {1, 2, 3}
for num in setData:
    print(num, end="\t")

# 周遊元組
print("")
print("開始周遊元組")
tupleData = ("a", "b", "c")
for ch in tupleData:
    print(ch, end="\t")

# 開始周遊字典
print("")
print("開始周遊字典:")
dictData = {"name": "Tom", "age": 18, "sex": "男"}
for item in dictData.items():
    print(item, end="\t")           

執行結果如下:

Python的程式控制結構

需要說明的是,Python中的字元串也可被當作清單直接進行周遊,如下面的例子:

s = "Hello world"
for c in s:
    print(c.upper(), end="\t")           

執行結果如下:

Python的程式控制結構

4.3 循環跳轉

對于Python而言,與其他程式設計語言一樣,均提供了break跳轉和continue跳轉。

4.3.1 break跳轉

當使用break關鍵字控制循環跳轉時,會直接退出整個循環。下面為對應的例子:

data = ["Tom", "Jerry", "Spike"]
for item in data:
    if item == "Jerry":
        break
    print(item)           

執行結果如下:

Python的程式控制結構

4.3.2 continue跳轉

當使用continue關鍵字進行循環跳轉時,會結束本次循環,開始下一次循環。下面為對應的例子:

data = ["Tom", "Jerry", "Spike"]
for item in data:
    if item == "Jerry":
        continue
    print(item)           

執行結果如下:

Python的程式控制結構

4.4 else

在Python中,循環還可與else進行搭配使用,表示當循環正常結束後需執行的代碼。while循環和for循環均可使用。但此時也許大家會有疑問,因為按照執行順序來說,當循環結束後,之後的代碼本來就會被執行,額外整個文法出來是否有點畫蛇添足?剛開始我也這麼認為,直到使用break關鍵字後才發現,else代碼竟然未執行。此時才有點明白,所謂正常循環結束的含義。想來,break也算到了非正常結束循環的範疇。

下面以for循環為例,示範一下else的使用。至于while循環的使用,大家可舉一反三。

4.4.1 正常結束

下面為對應的例子:

data = ["Tom", "Jerry", "Spike"]
for item in data:
    print(item)
else:
    print("循環正常結束")           

執行結果如下:

Python的程式控制結構

4.4.2 break終止循環

下面為使用break終止循環後的示例:

data = ["Tom", "Jerry", "Spike"]
for item in data:
    if item == "Jerry":
        break
    print(item)
else:
    print("循環正常結束")           

執行結果如下:

Python的程式控制結構

4.4.3 coninue跳過本次循環

下面為使用continue跳過本次循環的示例:

data = ["Tom", "Jerry", "Spike"]
for item in data:
    if item == "Jerry":
        continue
    print(item)
else:
    print("循環正常結束")           

執行結果如下:

Python的程式控制結構