一、概述
對于程式設計語言而言,必然會存在對應的程式控制結構。常見的程式控制結構有三種,分别為:順序結構、分支結構和循環結構。對于順序結構而言,程式會按照語句聲明的順序依次執行。而分支結構則是按照某種條件選擇對應的分支執行;循環則是按某種條件重複執行某些語句。
二、代碼塊
在說程式控制結構前先簡單說一下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代碼塊中的語句,如下:
若輸入的值小于18,則不會列印if代碼塊中的語句,如下:
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,屬于成年人",如下:
當輸入的數字小于18時,會輸出"年齡未滿18歲,屬于未成年人",如下:
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")
執行結果如下:
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時,會提示"您不是管理者,無法進行登入",如下:
當輸入的使用者名為"admin",密碼為"123"時,會提示"密碼錯誤,請驗證密碼是否正确!",如下:
當輸入的使用者名為"admin",密碼為"123456"時,提示"驗證通過",如下:
3.1.5 三目運算
對于Python而言,也提供了三目運算符,其格式為:
條件成立時執行的表達式 if 條件 else 條件不成立時執行的表達式
從格式來看,這與Java有所不同,Java中的三目表達式的 格式:
條件 ? 條件成立時執行的表達式 :條件不成立時執行的表達式
下面為對應的例子:
age = int(input("請輸入年齡:"))
message = "已滿18歲,屬于成年人" if age >= 18 else "未滿18歲,屬于未成年人"
print(message)
當輸入的值大于或等于18時,會提示"已滿18歲,屬于成年人", 如下:
當輸入的值小于18時,會提示"未滿18歲,屬于未成年人",如下:
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("無效的季節")
執行結果如下:
當然,對于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)
執行結果如下:
- 擷取100以内的所有偶數
對應的例子如下:
result = []
i = 1
while i <= 100:
if i & 1 == 0:
result.append(i)
i += 1
print("100内的所有偶數為:", result)
執行結果如下:
- 求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)
執行結果如下:
4.2 for循環
for循環的文法格式如下:
for 臨時變量 in 序列:
循環執行語句
下面還是使用上面的幾個例子來示範for循環的使用。
- 計算1-100的累加和
對應的例子如下:
result = 0
for i in range(1, 101, 1):
result += i
print("100之内所有數之和為:", result)
執行結果如下:
- 擷取100以内的所有偶數
對應的例子如下:
result = []
for i in range(1, 101):
if i & 1 == 0:
result.append(i)
print("100内的所有偶數為:", result)
執行結果如下:
- 求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)
執行結果如下:
當然,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中的字元串也可被當作清單直接進行周遊,如下面的例子:
s = "Hello world"
for c in s:
print(c.upper(), end="\t")
執行結果如下:
4.3 循環跳轉
對于Python而言,與其他程式設計語言一樣,均提供了break跳轉和continue跳轉。
4.3.1 break跳轉
當使用break關鍵字控制循環跳轉時,會直接退出整個循環。下面為對應的例子:
data = ["Tom", "Jerry", "Spike"]
for item in data:
if item == "Jerry":
break
print(item)
執行結果如下:
4.3.2 continue跳轉
當使用continue關鍵字進行循環跳轉時,會結束本次循環,開始下一次循環。下面為對應的例子:
data = ["Tom", "Jerry", "Spike"]
for item in data:
if item == "Jerry":
continue
print(item)
執行結果如下:
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("循環正常結束")
執行結果如下:
4.4.2 break終止循環
下面為使用break終止循環後的示例:
data = ["Tom", "Jerry", "Spike"]
for item in data:
if item == "Jerry":
break
print(item)
else:
print("循環正常結束")
執行結果如下:
4.4.3 coninue跳過本次循環
下面為使用continue跳過本次循環的示例:
data = ["Tom", "Jerry", "Spike"]
for item in data:
if item == "Jerry":
continue
print(item)
else:
print("循環正常結束")
執行結果如下: