Python 的布林運算與決策敘述是程式流程控制的根本。布林運算根據 True 和 False 兩個值,搭配 not、and、or 等布林運算元,可以建構複雜的條件判斷式。關係運算元則用於比較數值或字串,例如大於、小於、等於等,其結果也是布林值。這些布林值搭配 if、if-else、巢狀 if 以及 if-elif-else 等決策敘述,就能根據不同的條件執行不同的程式碼區塊,實作程式流程的彈性控制。常見應用包含根據條件計算數值、顯示不同訊息、或是執行特定的函式等等,是程式開發中不可或缺的基礎概念。
4 決策敘述
本章學習成果
完成本章後,學生將能夠:
- 描述布林運算式和布林資料型別
- 使用布林和關係運算元(>、<、>=、<= 和 !=)對數字和字串進行運算
- 編寫簡單的決策敘述及其使用 if 敘述的實作、雙向決策敘述及其使用 if-else 敘述的實作、巢狀敘述及其使用 if 敘述的實作,以及多向決策敘述及其使用 if-elif-else 敘述的實作
- 使用條件運算式編寫程式
- 使用布林運算式編寫非順序程式
本章大綱
4.1 簡介 4.2 布林型別 4.3 布林運算元 4.4 使用數字與布林運算元 4.5 使用字串與布林運算元 4.6 布林運算式和關係運算元 4.7 決策敘述 4.8 條件運算式
4.1 簡介
到目前為止,我們已經看到了包含一系列指令的程式。這些程式是由編譯器一行一行地執行,就像程式碼出現的那樣。在這樣的程式中,控制流程是順序的。控制流程是指程式敘述被執行的順序,也就是說,當一個敘述的執行完成後,電腦控制就會傳遞到程式碼中的下一個敘述。這個過程類別似於閱讀書頁上的文字、圖表和表格。
在單一程式中,指令是按照它們在程式中出現的順序逐一執行的。當然,這是初學者開發簡單程式的基本程式設計概念。然而,並非所有問題都適合使用順序程式設計風格。在許多情況下,根據情況改變程式敘述的執行順序是有利的。在實時應用中,有許多情況下,程式設計師需要根據某些條件改變敘述的執行順序。因此,當程式設計師希望控制流程是非順序的時候,可以使用控制結構或決策敘述。因此,決策敘述幫助程式設計師根據條件將控制從一個敘述轉移到另一個敘述。簡而言之,程式設計師根據條件決定哪個敘述被執行。決策敘述使用類別似於布林運算式的條件。
閱讀本章後,程式設計師可以處理現實生活中的問題/應用,並使用包含條件敘述的Python程式設計來實作。程式設計師可能會思考如何準備成績單、電費單、鐵路運費計算(根據距離)、銀行問題中的存款利息計算等。當然,自然界中存在著無數的問題,程式設計師需要提供程式設計解決方案。
4.2 布林型別
Python 有一個稱為 bool 的型別。bool 只有兩個值,即 True 和 False。Boolean 這個術語來自英國數學家 George Boole 的名字。在 19 世紀 40 年代,Boole 表明經典邏輯規則可以用純數學的形式來表達,只使用兩個值,即 True 和 False。Python 中最簡單的布林運算式是 True 和 False。
在 Python 互動式 shell 中,程式設計師可以檢查 True 和 False 這兩個值的型別是否屬於 bool 型別,如下所示:
>>> True
True
>>> False
False
>>> type(True)
<class 'bool'> # True 的值屬於 bool 型別
>>> type(False)
<class 'bool'> # False 的值屬於 bool 型別
注意:只有兩個布林值,即 True 和 False。首字母大寫很重要,因此 true 和 false 不被視為 Python 中的布林值。如圖所示,如果程式設計師檢查 true 或 false 的型別,Python 直譯器將顯示錯誤。
程式碼範例:
>>> type(true)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
type(true)
NameError: name 'true' is not defined
內容解密:
這段程式碼嘗試檢查 true 的型別,但由於 true 未被定義(因為 Python 是區分大小寫的,且布林值應該是 True 或 False),因此會引發 NameError。
4.3 布林運算元
and、or 和 not 是三個基本的布林運算元。布林運算元也被稱為邏輯運算元。not 運算元的優先順序最高,其次是 and,然後是 or。
4.3.1 not 運算元
not 運算元是一個一元運算元。它只作用於一個值。not 運算元對其運算元的布林值進行否定或反轉。如果我們對一個具有 False 值的運算式應用 not 運算元,則傳回 True。同樣,如果我們對一個具有 True 值的運算式應用 not 運算元,則傳回 False。
程式碼範例:
>>> True
True
>>> not True
False
>>> False
False
>>> not False
True
內容解密:
這段程式碼展示了 not 運算元的使用。它對給定的布林值進行否定操作。如果原始值是 True,則傳回 False,反之亦然。
4.3.2 and 運算元
and 是一個二元運算元。and 運算元需要兩個運算元,並從左到右進行評估,以確定兩個運算元是否都為真。因此,只有當兩個運算元都為真時,布林運算元的 and 結果才為真。表格 4.1 說明瞭 and 運算元。
| X | Y | X and Y |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
程式碼範例:
>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False
內容解密:
這段程式碼展示了 and 運算元的使用。只有當兩個運算元都為 True 時,結果才為 True;否則,結果為 False。
4.3.3 or 運算元
兩個布林運算元的 or 結果在至少一個運算元為真時為真。表格 4.2 說明瞭 or 運算元。
| X | Y | X or Y |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
程式碼範例:
>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False
內容解密:
這段程式碼展示了 or 運算元的使用。只要至少有一個運算元為 True,結果就為 True;否則,結果為 False。
4.4 使用數字與布林運算元
在 Python 中,可以使用數字與布林運算元。例如:
>>> not 1
False
內容解密:
這段程式碼展示了在布林運算中使用數字的例子。在 Python 中,非零數字被視為 True,零被視為 False。因此,not 1 等同於 not True,結果為 False。
布林運算與決策敘述
在 Python 程式設計中,布林運算和決策敘述是控制程式流程的重要基礎。本章節將探討布林運算、布林運算元、關係運算元以及 if 敘述等主題。
布林運算元
Python 中的布林運算元主要用於評估表示式是否為真或假。其中最常用的布林運算元是 not、and 和 or。
使用 not 運算元
not 運算元用於反轉一個布林值。例如:
>>> not 5
False
>>> not 0
True
>>> not 'hello'
False
>>> not ''
True
在上述範例中,Python 將非零數字和非空字串視為 True,而將零和空字串視為 False。因此,not 5 等同於 not True,結果為 False;而 not 0 等同於 not False,結果為 True。
布林表示式與關係運算元
布林表示式是用於評估是否為真或假的表示式。Python 中的關係運算元可用於比較兩個值,並傳回一個布林值。常見的關係運算元包括:
| 運算元 | 意義 | 範例 | 傳回值 |
|---|---|---|---|
> | 大於 | 4 > 1 | True |
< | 小於 | 4 < 9 | True |
>= | 大於或等於 | 4 >= 4 | True |
<= | 小於或等於 | 4 <= 3 | False |
!= | 不等於 | 5 != 4 | True |
== | 等於 | 2 == 2 | True |
>>> a = 2
>>> b = 2
>>> a == b
True
值得注意的是,比較運算元 == 與指定運算元 = 不同,前者用於比較兩個值是否相等,而後者用於將一個值賦給變數。
程式範例:比較三個數值
以下是一個程式範例,提示使用者輸入三個數值,並輸出多個布林表示式的結果:
p, q, r = eval(input('Enter Three Numbers: '))
print('p =', p, 'q =', q, 'r =', r)
print('(p > q > r) is', p > q > r)
print('(p < q < r) is', p < q < r)
print('(p < q) and (q < r) is', (p < q) and (q < r))
print('(p < q) or (q < r) is', (p < q) or (q < r))
輸出結果:
Enter Three Numbers: 1, 2, 3
p = 1 q = 2 r = 3
(p > q > r) is False
(p < q < r) is True
(p < q) and (q < r) is True
(p < q) or (q < r) is True
決策敘述
Python 中的決策敘述主要包括 if 敘述、if-else 敘述、巢狀 if 敘述和多路 if-elif-else 敘述。
if 敘述
if 敘述用於在條件為真時執行特定的程式碼區塊。其語法結構如下:
if condition:
statement(s)
其中,condition 是一個布林表示式,若其評估結果為 True,則執行縮排的程式碼區塊。
num1 = eval(input("Enter First Number: "))
num2 = eval(input("Enter Second Number: "))
if num1 - num2 == 0:
print("Both the numbers entered are Equal")
在上述範例中,若兩個輸入數字相等,則輸出訊息 “Both the numbers entered are Equal”。
程式範例:計算圓面積和周長
以下是一個程式範例,提示使用者輸入圓的半徑,若半徑大於零,則計算並輸出圓的面積和周長:
from math import pi
Radius = eval(input("Enter Radius of Circle: "))
if Radius > 0:
Area = Radius * Radius * pi
print("Area of Circle is =", format(Area, ".2f"))
Circumference = 2 * pi * Radius
print("Circumference of Circle is =", format(Circumference, ".2f"))
輸出結果:
Enter Radius of Circle: 5
Area of Circle is = 78.54
Circumference of Circle is = 31.42
if-else 敘述
if-else 敘述用於在條件為真時執行一個程式碼區塊,而在條件為假時執行另一個程式碼區塊。其語法結構如下:
if condition:
statement(s)
else:
statement(s)
這種結構使得程式能夠處理條件成立和不成立兩種情況。
條件判斷敘述詳解
在Python程式設計中,條件判斷敘述(Decision Statements)扮演著極為重要的角色,用於控制程式的流程。本文將探討if-else敘述、if巢狀結構以及相關的布林運算。
if-else 敘述詳解
if-else敘述用於處理條件判斷的兩種情況:真(True)與假(False)。其基本語法如下:
if 條件:
# 條件為真時執行的程式碼
else:
# 條件為假時執行的程式碼
程式範例:比較兩個數的大小
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))
if num1 > num2:
print(num1, "大於", num2)
else:
print(num2, "大於或等於", num1)
內容解密:
input()函式用於取得使用者輸入,並透過int()轉換為整數。if num1 > num2:判斷第一個數字是否大於第二個數字。- 根據條件結果,執行對應的
print()敘述。
醫療代表薪資計算程式
此程式根據銷售業績計算醫療代表的薪資,包含基本薪資、津貼和獎金。
程式範例:
sales = float(input('輸入本月總銷售額:'))
if sales >= 100000:
basic = 4000
hra = 0.2 * basic # 修正計算方式
da = 1.1 * basic # 修正計算方式
incentive = 0.1 * sales
bonus = 1000
conveyance = 500
else:
basic = 4000
hra = 0.1 * basic
da = 1.1 * basic
incentive = 0.04 * sales
bonus = 500
conveyance = 500
salary = basic + hra + da + incentive + bonus + conveyance
print('員工薪資明細')
print('總銷售額 = ', sales)
print('基本薪資 = ', basic)
print('房屋津貼 = ', hra)
print('生活津貼 = ', da)
print('獎勵 = ', incentive)
print('獎金 = ', bonus)
print('交通津貼 = ', conveyance)
print('總薪資 = ', salary)
內容解密:
- 程式首先讀取銷售業績。
- 根據銷售業績是否達到10萬元,分別計算不同的薪資結構。
- 最後輸出詳細的薪資明細。
邏輯運算元與條件判斷
Python中的邏輯運算元包括and、or和not,用於組合多個條件判斷。
程式範例:判斷數字是否能被5或10整除
num = int(input('輸入一個數字:'))
if num % 5 == 0 and num % 10 == 0:
print(num, '能被5和10整除')
elif num % 5 == 0 or num % 10 == 0:
print(num, '能被5或10整除')
else:
print(num, '不能被5或10整除')
內容解密:
%運算元用於計算餘數。and運算元要求兩個條件都為真。or運算元只要其中一個條件為真即成立。
if巢狀結構
當需要在一個條件判斷內再進行另一個條件判斷時,就會使用到if巢狀結構。
基本語法
if 布林運算式1:
if 布林運算式2:
# 當兩個條件都為真時執行的程式碼
重點整理
- Python對縮排要求嚴格,
else必須與對應的if對齊。 - 邏輯運算元的使用可以簡化複雜的條件判斷。
if巢狀結構可用於處理多層次的條件判斷。
綜上所述,Python中的條件判斷敘述提供了靈活的程式控制流程,能夠處理各種複雜的邏輯判斷需求。透過恰當使用if-else、if巢狀結構以及邏輯運算元,可以編寫出清晰高效的程式碼。