如果(If) | Python 中的条件控制语句详解

前言

文章首发于个人公众号:可乐python说

Hi,大家好,我是可乐,生活中曾听到过太多的如果,如果当年我再认真一点,如果我高考的物理多选题没有多选选项,如果我大学时多学些技能,如果我早点买房等等。

工作中,同样存在很多 如果 ,今天给大家详细介绍 Python 中的条件控制语句,并附上相应的案例代码,便于吸收、理解。

条件控制语句简介

Python 中的 条件控制语句 (Conditional control statement) 是通过一条或者多条语句的执行结果(True 或者 False),来决定执行的代码逻辑 。

它包含 ifelifelse 关键字, Python 中没有 else if 的写法,只存在 elif 这种写法。

每句判断语句使用冒号 - : 结尾,使用 缩进 划分语句块,相同缩进数的语句组成一个语句块。

条件控制语句,包括 if 语句、if - else 语句、if - elif - else 语句、以及 if - elif (多个elif) - else 语句,下面我们通过案例逐一演示。

if 语句

if 语句,仅有一个判断条件,如果条件成立(为 True),则执行判断语句后带缩进的代码逻辑,否则不执行。

1、语法格式:

# 语句末尾的冒号一定不能丢
if 判断条件:
    # 注意与 if 缩进
    条件为真才执行的代码逻辑

2、执行流程图:

3、案例:

>>> if True:
        print("条件为真时打印的语句")
        
条件为真时打印的语句

if - else 语句

if - else 语句,仅有一个判断条件,与 if 语句的区别在于,如果条件成立(为 True),则执行 if 判断语句后带缩进的代码逻辑,否则执行 else 后带缩进的代码逻辑。

1、语法格式:

# 语句末尾的冒号一定不能丢
if 判断条件:
    # 注意与 if 缩进
    条件为真时执行的代码逻辑
else:
    # 注意与 else 缩进
    条件为假时执行的代码逻辑

2、执行流程图:

3、案例:

>>> if True:
        print("条件为真时打印的语句")
    else:
        print("条件为假时打印的语句")
        
条件为真时打印的语句

>>> if False:
        print("条件为真时打印的语句")
    else:
        print("条件为假时打印的语句")
        
条件为假时打印的语句

if - elif - else 语句

在使用判断语句时,我们有时需要对两个条件进行判断,并执行对应的代码逻辑,这时以上两种语句就无法满足我们的需求。

我们可使用 if - elif - else 语句,有两个判断条件,如果 if 后的条件成立(为 True),则执行 if 判断语句后带缩进的代码逻辑。

如果 elif 后的条件成功(为 True),则执行 elif 判断语句后带缩进的代码逻辑,否则执行 else 后带缩进的代码逻辑。

值得注意的是,if - elif - else 语句中,仅有一个条件成立后,就会退出当前整个判断语句,简单来说,这三条判断路径,只会走其中一条。

1、语法格式:

# 语句末尾的冒号一定不能丢
if 判断条件一:
    # 注意与 if 缩进
    条件一为真时执行的代码逻辑
elif 判断条件二:
    # 注意与 if 缩进
    条件二为真时执行的代码逻辑
else:
    # 注意与 else 缩进
    条件一、条件二都为假时执行的代码逻辑

2、执行流程图:

3、案例:

>>> drink = "kele"
>>> if drink == "kele":
        print("你选择的饮品是可乐")
    elif drink == "xuebi":
        print("你选择的饮品是雪碧")
    else:
        print("你选择的既不是可乐,也不是雪碧")
        
你选择的饮品是可乐       

if - elif (多个) - else 语句

与 if - elif - else 语句的区别在于,elif 条件判断的数量不止一个。

1、语法格式:

# 语句末尾的冒号一定不能丢
if 判断条件一:
    # 注意与 if 缩进
    条件一为真时执行的代码逻辑
elif 判断条件二:
    # 注意与 if 缩进
    条件二为真时执行的代码逻辑
...
elif 判断条件N:
    # 注意与 if 缩进
    条件N为真时执行的代码逻辑
else:
    # 注意与 else 缩进
    条件一、条件二、...条件N都为假时执行的代码逻辑

2、执行流程图:

3、案例:

>>> drink = "Moutai"
>>> if drink == "kele":
        print("你选择的饮品是可乐")
    elif drink == "xuebi":
        print("你选择的饮品是雪碧")
    elif drink == "tea":
        print("你选择的饮品是茶")
    else:
        print("你选择的不是可乐,不是雪碧,也不是茶")
        
你选择的不是可乐,不是雪碧,也不是茶

嵌套使用

以上四种条件控制语句,均支持自身嵌套、以及彼此嵌套使用,下面以 if 语句 与 if- else 语句为例:

if 语句自身嵌套使用
>>> drink = "kele"
>>> ice = "True"
# 第一层判断是否是可乐
>>> if drink == "kele":
        # 第二层判断是否加冰
        if ice == "True":
            print("你选择的饮品是可乐加冰")
                    
你选择的饮品是可乐加冰
if - else 语句自身嵌套使用
>>> drink = "kele"
>>> ice = "True"
>>> if drink == "kele":
        if ice == "True":
            print("你选择的饮品是可乐加冰")
        else:
            print("你选择的饮品是可乐不加冰")
    else:
        print("你选择的饮品不是可乐")
                    
你选择的饮品是可乐加冰
if 语句与 if - else 语句彼此嵌套使用
>>> drink = "kele"
>>> ice = "False"
>>> if drink == "kele":
        if ice == "True":
            print("你选择的饮品是可乐加冰")
        else:
            print("你选择的饮品是可乐不加冰")
                    
你选择的饮品是可乐不加冰

条件控制语句中常用的基础运算符

常用的基础运算符可参照下表:

操作符 说明
< 小于
<= 小于或者等于
> 大于
>= 大于或者等于
== 等于,比较两侧对象的值是否相等
!= 不等于
in / not in 成员运算符
is / not is 身份运算符

1、小于 - < 与 小于或者等于 - <=

>>> score = 59
>>> if 0 < score < 60:
        print("未及格,继续努力")
    elif 60 <= age < 69:
        print("及格,继续进阶")
    else:
        print("中等、良好、或优秀")
                    
未及格,继续努力

2、大于 - > 与 大于或者等于 - >=

>>> score = 91
>>> if score >= 60:
        print("及格,继续进阶")
    elif score > 90:
        print("优秀")
    else:
        print("其他等级")
                    
优秀

3、等于 - == 与 不等于 - !=

>>> password = "123456"
>>> if password == "123456":
        print("登陆成功")
                    
登陆成功

>>> user_name = "zhangsan"
>>> if user_name != "root":
        print("没有操作权限")
                    
没有操作权限

4、成员运算符 innot in 判断成员是否在序列中

>>> user_list = ["kele","zhangsan"]
>>> login_name = "lisi"
>>> if login_name not in user_list:
        print("用户不存在")
    elif login_name in user_list:
        print("登陆成功")
                    
用户不存在

5、身份运算符 isnot is 比较两个对象的存储单元

>>> kele_age = 18
>>> xuebi_age = 18
>>> if kele_age is xuebi_age:
        print("两者指向同一块内存空间")
    if kele_age not is xuebi_age:
         print("两者指向不同的内存空间")
    
两者指向同一块内存空间

条件控制语句中常用的逻辑运算符

常用的逻辑运算符可参照下表:

运算符 说明
not 逻辑非
and 逻辑与
or 逻辑或

1、逻辑非 - not,对语句的布尔值取反

>>> bool_1 = True
>>> bool_2 = False
>>> if not bool_1:
        print("对真取非为假")
    if not bool_2:
        print("对假取非为真")
    
对假取非为真

2、逻辑与 - and,找 False,若第一个语句的值为 False 则直接返回 False,否则,返回第二个语句的值

# 有假则为假
>>> bool_1 = True
>>> bool_2 = False
>>> bool_3 = True
>>> if bool_1 and bool_2:
        print("有假则为假")
    if bool_1 and bool_3:
        print("全真才为真")
        
全真才为真

3、逻辑或 - or,找 True,若第一个语句的值为 True 则直接返回 True,否则,返回第二个语句的值

# 有真则为真
>>> bool_1 = True
>>> bool_2 = False
>>> bool_3 = False
>>> if bool_1 or bool_2:
        print("有真则为真")
    if bool_2 or bool_3:
        print("全假才为假")
        
有真则为真

扩展 - Python 中的特殊对象

Python 中有部分特殊对象,它们的布尔值为 False,具体可参照下表:

对象 布尔值
None False
所有值为零的数(整数、复数、浮点数) False
空字符串 False
空列表 False
空元组 False
空字典 False
空集合 False

下面我们逐一验证

1、None 与值为零的数

>>> if not None:
        print("None 的布尔值为 False")

None 的布尔值为 False 

>>> if not 0:
        print("0 的布尔值为 False")

0 的布尔值为 False

>>> if not 0.0:
        print("0.0 的布尔值为 False")

0.0 的布尔值为 False

>>> if not 0 + 0j:
        print("0 + 0j 的布尔值为 False")

0 + 0j 的布尔值为 False

2、空字符串、空列表、空元组

>>> if not "":
        print("空字符串的布尔值为 False")

空字符串的布尔值为 False

>>> if not []:
        print("空列表的布尔值为 False")

空列表的布尔值为 False

>>> if not tuple():
        print("空元组的布尔值为 False")

空元组的布尔值为 False

3、空字典、空集合

>>> if not {}:
        print("空字典的布尔值为 False")

空字典的布尔值为 False

>>> if not set():
        print("空集合的布尔值为 False")

空集合的布尔值为 False

扩展 - 使用否定判断精简代码

工作中,多使用否定判断,可精简部分代码,下面通过一个简单的案例说明

# 传统写法
is_kele = True
if is_kele:
    print("Yes")
else:
    print("No")

# 否定判断
is_kele = True
if not is_kele:
    print("No")
print("Yes")

扩展 - 猜拳游戏

import random


def guessing_game():
    """
    猜拳游戏 if - elif - else 与 逻辑运算符
    Author:可乐python说
    :return:
    """
    player_input = int(input("请出拳(0剪刀,1石头,2布):"))
    computer_ = random.randint(0, 2)
    if (player_input == 0 and computer_ == 2) \
            or (player_input == 1 and computer_ == 0) \
            or (player_input == 2 and computer_ == 0):
        print("电脑出拳%s,恭喜你赢了!" % computer_)
    elif (player_input == 0 and computer_ == 0) \
            or (player_input == 1 and computer_ == 1) \
            or (player_input == 2 and computer_ == 2):
        print("电脑出拳%s,平局!" % computer_)
    else:
        print("电脑出拳%s,很遗憾你输了!" % computer_)


if __name__ == '__main__':
    guessing_game()

扩展 - 火车检票进站

def train_check_in():
    """
    火车检票入站 if - else 嵌套
    Author:可乐python说
    :return: 
    """
    train_ticket = int(input("请出示车票(1表示有,0表示无):"))
    is_safe = int(input("请过安检(1表示安全,0表示危险):"))
    if train_ticket == 1:
        if is_safe == 1:
            print("通过安检,可以上车!")
        else:
            print("你携带了违规物品,没通过安检,不能上车!")
    else:
        print("没有车票,不能进站!")


if __name__ == '__main__':
    train_check_in()

总结

  1. 工作中在处理业务逻辑时,经常会使用到条件控制语句,当然,以嵌套使用为主。
  2. 使用条件控制语句时,可根据实际需求,灵活搭配使用基本运算符与逻辑运算符。
  3. 书写时需注意条件控制语句后的冒号 - : ,以及代码块的缩进问题。
  4. if - else 语句可理解为二选其一,if - elif - else 则为三选其一,包含多个 elif 则为 N 选其一,其中 else 并非必须选项。
  5. 使用逻辑运算符时,其优先级需要注意,加上小括号 - () 的语句优先级最高,() > not > and > or 。
  6. 使用条件控制语句时,建议多使用否定判断,这时值为空的特殊对象常被使用,可在一定程度上精简代码。
  7. 文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,也可分享条件控制语句相关的技巧、有趣的小案例。
  8. 原创文章已全部更新至 Github:https://github.com/kelepython/kelepython
  9. 本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c01/c01_09.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345