Python3 條件控制

2021-11-01 15:51 更新

if語句

Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊。


Python 中 if 語句的一般形式如下所示:

if condition_1:
    statement_block_1

流程圖如下所示:


這種if語句只有在符合條件的時(shí)候才會(huì)執(zhí)行代碼塊內(nèi)的代碼,是一種比較常見的用法。

另一種常見的用法是:

if condition_1:
    statement_block_1
else:
    statement_block_2

流程圖如下所示:


這種語句是一種常用的if-else語句,通常用于二分支結(jié)構(gòu)的條件語句代碼。

在一些時(shí)候,我們可能需要多分支的條件語句代碼,可以在if-else語句中混合elif語句進(jìn)行使用:

Python 中用 elif 代替了else if,所以if語句的關(guān)鍵字為:if – elif – else。

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

流程圖如下所示:


如果 "condition_1" 為 True 將執(zhí)行 "statement_block_1" 塊語句,如果 "condition_1" 為 False,將判斷 "condition_2",如果"condition_2" 為 True 將執(zhí)行 "statement_block_2" 塊語句,如果 "condition_2" 為 False,將執(zhí)行"statement_block_3"塊語句。

 使用第一種常用的if語句搭配合適的條件可以實(shí)現(xiàn)第二種和第三種語句的全部效果,但在執(zhí)行效率和代碼可讀性上會(huì)變得比較糟糕。

注意:

  • 1、每個(gè)條件后面要使用冒號(:),表示接下來是滿足條件后要執(zhí)行的語句塊。
  • 2、使用縮進(jìn)來劃分語句塊,相同縮進(jìn)數(shù)的語句在一起組成一個(gè)語句塊。
  • 3、在 Python 中沒有 switch – case 語句,但在python3.10中添加了用法類似的match-case語句。

match-case語句(python3.10新特性)

在其他語言(比如說經(jīng)典的C語言)中有一種多分支條件判斷語句,可以進(jìn)行模式匹配(通俗的講,就是將傳入的內(nèi)容跟多個(gè)已存在的樣例進(jìn)行比較,找到相同的案例并按照該案例的代碼進(jìn)行處理,如果沒有相同案例就按默認(rèn)案例進(jìn)行處理,可以查看其他編程語言的條件語句的Switch相關(guān)部分內(nèi)容進(jìn)行比較參考)。在python3.10中也引入了這樣的新特性。

match-case語句的結(jié)構(gòu)一般如下所示:

match variable: #這里的variable是需要判斷的內(nèi)容
    case ["quit"]: 
        statement_block_1 # 對應(yīng)案例的執(zhí)行代碼,當(dāng)variable="quit"時(shí)執(zhí)行statement_block_1    case ["go", direction]: 
        statement_block_2
    case ["drop", *objects]: 
        statement_block_3
    ... # 其他的case語句
    case _: #如果上面的case語句沒有命中,則執(zhí)行這個(gè)代碼塊,類似于Switch的default
        statement_block_default

一個(gè)match語句的使用示例:

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the Internet"

 上述代碼等價(jià)于:

def http_error(status):
    if status == 400:
        return "Bad request"
    elif status == 404:
        return "Not found"
    elif status == 418:
        return "I'm a teapot"
    else:
        return "Something's wrong with the Internet"

關(guān)于模式匹配還有更多的用法,可以參考PEP636進(jìn)行詳細(xì)的學(xué)習(xí)。

實(shí)例

以下實(shí)例演示了狗的年齡計(jì)算判斷:

age = int(input("Age of the dog: "))
print()
if age < 0:  
    print("This can hardly be true!") 
elif age == 1:  
    print("about 14 human years") 
elif age == 2:  
    print("about 22 human years") 
elif age > 2:
    human = 22 + (age -2)*5
    print("Human years: ", human)

### 
input('press Return>')

將以上腳本保存在 dog.py 文件中,并執(zhí)行該腳本:

python dog.py
Age of the dog: 1

about 14 human years

以下為 if 中常用的操作運(yùn)算符:

操作符 描述
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于,比較對象是否相等
!= 不等于

 只要返回結(jié)果為布爾型(true或者false)的,都可以作為if的條件,所以在之前的集合等內(nèi)容中涉及到的判斷元素是否在集合中的?in?和?not in?,都可以作為if的條件。

實(shí)例

# 程序演示了 == 操作符
# 使用數(shù)字
print(5 == 6)
# 使用變量
x = 5
y = 8
print(x == y)

以上實(shí)例輸出結(jié)果:

False
False

使用?in?和?not in?作為判斷條件:

thisset = set(("Google", "W3Cschool", "Taobao"))
if "W3Cschool" in thisset:
    print("該元素在列表中")
if "baidu" not in thisset:
    print("該元素不在列表中")

運(yùn)行結(jié)果如下:

該元素在列表中 該元素不在列表中

以下示例使用if語句來實(shí)現(xiàn)一個(gè)猜數(shù)字游戲(建議在本地環(huán)境嘗試):

#!/usr/bin/python3 
# 該實(shí)例演示了數(shù)字猜謎游戲
number = 7
guess = -1
print("猜數(shù)字!")
while guess != number:
    guess = int(input("請輸入你要猜的數(shù)字"))
    if guess == number:
        print("你猜中了,真厲害!")
    elif guess < number:
        print("猜小了,再猜猜?")
    elif guess > number:
        print("猜大了,在猜猜?")


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號