流程式控制制工具 三大流程 編程語言中有三大流程,分別是: 順序流程:代碼的執行順序從上到下,從左往右 分支流程:(又稱選擇流程)根據不同的情況執行不同的代碼 迴圈流程:程式重覆的執行某段代碼 當需要設計分支流程與迴圈流程時,就需要用到流程式控制制工具了。 分支流程式控制制工具 if 語句 if 語句用於有條件 ...
流程式控制制工具
三大流程
編程語言中有三大流程,分別是:
- 順序流程:代碼的執行順序從上到下,從左往右
- 分支流程:(又稱選擇流程)根據不同的情況執行不同的代碼
- 迴圈流程:程式重覆的執行某段代碼
當需要設計分支流程與迴圈流程時,就需要用到流程式控制制工具了。
分支流程式控制制工具
if
語句
if
語句用於有條件的執行,語法如下:
if_stmt ::= "if" assignment_expression ":" suite
("elif" assignment_expression ":" suite)*
["else" ":" suite]
if
語句對錶達式( assignment_expression
)逐個求值直到找到一個結果為 True
的表達式,並執行與之對應的子句體( suite
),且 if
語句的其他部分不會被執行或求值。如果所有表達式均為 False
,則如果 else
子句體如果存在就會被執行。
實現(implementation)格式如下:
if expression_1:
statement_block_1
elif expression_2:
statement_block_2
else:
statement_block_3
註意:
- 每個條件後面要使用冒號
:
,表示接下來是滿足條件後要執行的語句塊。 - 使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。
- 可以沒有
elif
和else
。可以有任意多個elif
。
match
語句 - 3.10
match
語句在3.10版本增加,筆者不是很建議用,因為很多地方可能還沒升級到 3.10
語法如下:
match_stmt ::= 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT
subject_expr ::= star_named_expression "," star_named_expressions?
| named_expression
case_block ::= 'case' patterns [guard] ":" block
match
後的對象會依次與 case
後的內容進行匹配,如果匹配成功,則執行匹配到的表達式,否則直接跳過,_
可以匹配一切。
實現格式如下:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2> if <expression_1>:
# 需匹配<pattern_2>且<expression_1>為真才會執行
<action_2>
case <pattern_3> | <pattern_4>:
# 可設置多個匹配條件,用 | 隔開
<action_3>
case _: # 一定匹配成功,類似 default
<action_wildcard>
match
語句沒有waterfall
效應,即完成一個action_x
後直接結束語句。
迴圈流程式控制制工具
在 console 中可以用 ctrl + C
或 ctrl + z
來中斷死迴圈。
while
語句
while
語句在表達式保持為真的情況下重覆地執行,語法如下:
while_stmt ::= "while" assignment_expression ":" suite
["else" ":" suite]
while
語句反覆的對錶達式( assignment_expression
)求值,如果其結果為 True
則執行第一個 suite
,反之如果 else
子句體存在則實行 else
子句體並終止迴圈。
註意:
- 第一個
suite
中的break
語句在執行時將終止迴圈且不執行else
子句體。 - 第一個
suite
中的continue
語句在執行時將跳過suite
剩餘部分並返回檢驗表達式。
實現語法如下:
while expr:
statement(s)
else:
additional_statement(s)
for
語句
for
語句用於對序列(例如字元串、元組或列表)或其他可迭代對象中的元素進行迭代,
語法如下:
for_stmt ::= "for" target_list "in" starred_list ":" suite
["else" ":" suite]
starred_list
表達式會被求值一次,返回一個可迭代對象,否則報錯。
然後為該對象創建一個迭代器,依次將迭代器返回的數據給目標列表( target_list
),並執行suite
。
迭代器耗盡後,如果存在 else
子句中的代碼塊,則執行並終結迴圈。
註意:
- 第一個子句體中的
break
語句在執行時將終止迴圈且不執行else
子句體。 - 第一個子句體中的
continue
語句在執行時將跳過子句體中的剩餘部分並轉往下一項繼續執行,或者在沒有下一項時轉往else
子句執行。
實現語法如下:
for i in iterable:
expr1
else:
expr2
實現實例:
for i in range(10):
print(i)
else:
print("Loop finished")
target_list
在迴圈結束後依然存在,但如果 starred_list
為空,則target_list
不會被賦值,即不存在。
參考資料:
Python 文檔:複合語句
Python 文檔:更多控制流工具 - if 語句
Python 文檔:更多控制流工具 - match 語句