Python3 條件控制

2021-11-01 15:51 更新

if語(yǔ)句

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


Python 中 if 語(yǔ)句的一般形式如下所示:

if condition_1:
    statement_block_1

流程圖如下所示:


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

另一種常見(jiàn)的用法是:

if condition_1:
    statement_block_1
else:
    statement_block_2

流程圖如下所示:


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

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

Python 中用 elif 代替了else if,所以if語(yǔ)句的關(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" 塊語(yǔ)句,如果 "condition_1" 為 False,將判斷 "condition_2",如果"condition_2" 為 True 將執(zhí)行 "statement_block_2" 塊語(yǔ)句,如果 "condition_2" 為 False,將執(zhí)行"statement_block_3"塊語(yǔ)句。

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

注意:

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

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

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

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

match variable: #這里的variable是需要判斷的內(nèi)容
    case ["quit"]: 
        statement_block_1 # 對(duì)應(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語(yǔ)句
    case _: #如果上面的case語(yǔ)句沒(méi)有命中,則執(zhí)行這個(gè)代碼塊,類(lèi)似于Switch的default
        statement_block_default

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

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)算符:

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

 只要返回結(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語(yǔ)句來(lái)實(shí)現(xiàn)一個(gè)猜數(shù)字游戲(建議在本地環(huán)境嘗試):

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)