跳轉到內容

Python 程式設計/決策控制

來自 Wikibooks,開放的書籍,開放的世界


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)

布林表示式可以在你需要同時檢查兩個或更多不同事物時使用。
  1. 示例

[編輯 | 編輯原始碼]

password1.py
華夏公益教科書