Python 程式設計/決策控制
Python,像許多其他計算機程式語言一樣,使用布林邏輯進行其決策控制。也就是說,Python 直譯器比較一個或多個值,以決定是否執行一段程式碼,前提是語法和指令正確。
決策控制被進一步分為兩大類,條件和重複。條件邏輯簡單地使用關鍵字if和布林表示式來決定是否執行程式碼塊。重複在條件結構的基礎上,為我們提供了一種簡單的方法,在布林表示式計算結果為true時,重複執行程式碼塊。
這裡有一個布林表示式的小例子(你不必輸入它)
a = 6
b = 7
c = 42
print (1, a == 6)
print (2, a == 7)
print (3, a == 6 and b == 7)
print (4, a == 7 and b == 7)
print (5, not a == 7 and b == 7)
print (6, a == 7 or b == 7)
print (7, a == 7 or b == 6)
print (8, not (a == 7 and b == 6))
print (9, not a == 7 and b == 6)
輸出結果為
1 True 2 False 3 True 4 False 5 True 6 True 7 False 8 True 9 False
發生了什麼?程式包含一堆奇怪的print語句。每個print語句列印一個數字和一個表示式。數字用於幫助跟蹤我正在處理哪個語句。請注意每個表示式最終都是 True 還是 False;這些是 Python 的內建值。這些行
print (1, a == 6)
print (2, a == 7)
分別打印出 True 和 False,正如預期的那樣,因為第一個是真,第二個是假。第三個 print 語句,print (3, a == 6 and b == 7),有點不同。運算子and表示如果之前和之後的語句都為真,那麼整個表示式為真,否則整個表示式為假。下一行,print (4, a == 7 and b == 7),展示瞭如果表示式的一部分為假,那麼整個表示式都為假。運算子andandand的行為可以總結如下
| 表示式 | 結果 |
|---|---|
| true and true | true |
| true and false | false |
| false and true | false |
| false and false | false |
請注意,如果第一個表示式為假,Python 不會檢查第二個表示式,因為它知道整個表示式為假。
下一行,print (5, not a == 7 and b == 7),使用了not運算子。not它只是給出表示式的相反(表示式可以改寫為print (5, a != 7 and b == 7))。這裡是表格
| 表示式 | 結果 |
|---|---|
| not true | false |
| not false | true |
接下來的兩行,print (6, a == 7 or b == 7)andprint (7, a == 7 or b == 6),使用了or運算子。運算子oror
| 表示式 | 結果 |
|---|---|
| 如果第一個表示式為真,或者第二個表示式為真,或者兩者都為真,則返回真。如果兩者都不為真,則返回假。這裡是表格 | true |
| true or true | true |
| true or false | true |
| false or true | false |
false or falseor請注意,如果第一個表示式為真,Python 不會檢查第二個表示式,因為它知道整個表示式為真。這是因為
or如果至少一個表示式為真,則為真。第一部分為真,所以第二部分可以是假或真,但整個表示式仍然為真。and接下來的兩行,print (8, not (a == 7 and b == 6))notprint (9, not a == 7 and b == 6),展示了括號可以用來分組表示式,並強制先評估一部分。請注意,括號將表示式從假變為真。這是因為括號強制運算子not
應用於整個表示式,而不是僅僅應用於
list = ["Life","The Universe","Everything","Jack","Jill","Life","Jill"]
# Make a copy of the list.
copy = list[:]
# Sort the copy
copy.sort()
prev = copy[0]
del copy[0]
count = 0
# Go through the list searching for a match
while count < len(copy) and copy[count] != prev:
prev = copy[count]
count = count + 1
# If a match was not found then count can't be < len
# since the while loop continues while count is < len
# and no match is found
if count < len(copy):
print ("First Match:",prev)
a == 7
部分。
First Match: Jill
這是一個使用布林表示式的例子請參見列表章節,以瞭解 copy = list[:] 中出現的切片運算子 [:] 的解釋。這裡是輸出結果這個程式透過持續檢查匹配來工作while count < len(copy) and copy[count] != prev。當countand大於copy的最後一個索引,或者找到匹配項時,while不再為真,所以迴圈退出。然後
ifand簡單地檢查以確保andwhile退出是因為找到了匹配項。這個例子中使用了另一個“技巧”。如果你檢視and的表格,你會注意到第三個條目是“false and won't check”。如果andcount >= len(copy)and(換句話說,這個程式透過持續檢查匹配來工作count < len(copy)。當為假),那麼就不會檢視 copy[count]。這是因為 Python 知道,如果第一個為假,那麼兩者不可能都為真。這被稱為短路,如果第二個表示式在出現錯誤時會導致錯誤,它將非常有用。我使用了第一個表示式(count < len(copy))來檢查count.)
是否為
copy
的有效索引。(如果你不信,請刪除匹配項“Jill”和“Life”,檢查它是否仍然有效,然後反轉count < len(copy) and copy[count] != prev
## This programs asks a user for a name and a password.
# It then checks them to make sure that the user is allowed in.
# Note that this is a simple and insecure example,
# real password code should never be implemented this way.
name = raw_input("What is your name? ")
password = raw_input("What is the password? ")
if name == "Josh" and password == "Friday":
print ("Welcome Josh")
elif name == "Fred" and password == "Rock":
print ("Welcome Fred")
else:
print ("I don't know you.")
的順序為
What is your name? Josh What is the password? Friday Welcome Josh What is your name? Bill What is the password? Saturday I don't know you.
copy[count] != prev and count < len(copy)
布林表示式可以在你需要同時檢查兩個或更多不同事物時使用。- 示例