在 if...elif...else 的多个语句块中只会执行一个语句块?_如果 (If) | Python 中的条件控制语句详解...

本文介绍了Python中的条件控制语句,包括if, if-else, if-elif-else,以及它们的嵌套使用。详细讨论了基础和逻辑运算符,并提供了猜拳游戏和火车检票进站等实际应用案例。强调在编写时注意冒号、缩进和逻辑运算符的优先级。同时提倡使用否定判断和特殊对象来简化代码。" 113672286,10541480,使用Python Pygame制作经典游戏教程,"['Python游戏开发', 'Pygame', '编程教程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享!26956a21d45be9d591a7dfa140088a0a.png
前言
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、执行流程图:

ad56de40211f1098d66e06ae8d257564.png

3、案例:

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

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

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

2、执行流程图:

1519d482e3ecbaaaaded7805b0c1e7d4.png

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、执行流程图:

fb11a14bfcfeb2a47e1e35d3605bfe82.png

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、执行流程图:

887af0107523256863467d7d2a7ef74d.png

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 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、成员运算符  in 、not in 判断成员是否在序列中

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

5、身份运算符  is 、not 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 = Trueif is_kele:
    print("Yes")else:
    print("No")# 否定判断
is_kele = Trueif not is_kele:
    print("No")
print("Yes")

扩展 - 猜拳游戏

import randomdef 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
历史文章推荐阅读Python 列表操作,节后大放送Python 字典操作,母亲节加餐元组(Tuple) | 不可改变的 Python 数据类型集合 (Set) | 一山不容二虎的 Python 数据类型

分享( Share) | 2019 年下半年的计算机软考证书申领教程

数字(Number) | 最贴近生活的 Python 数据类型扫码关注公众号获取更多分享

e1e722ba7963c7e3937c1e78434227c3.png

如果觉得还不错,点个"在看"鼓励一下!
<think>首先,用户的问题是关于Python的:为什么在for循环中,if条件满足但elif执行。用户可能遇到了一个情况,在循环中,if语句执行了,但elif语句没有被执行。 回顾系统指令: - 所有行内数学表达式用$...$,比如变量。 - 独立公式用$$...$$。 - 使用中文回答。 - 生成相关问题。 - 在引用的段落末尾添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 参考提供的引用: - 引用[1]:解释了elifelse if的简写,用于在ifelse之间检查更多条件。 - 引用[2]:关于Pythonif条件控制和for循环,包括break语句。 - 引用[3]:讨论了避免滥用break和continue,建议通过修改循环条件来替代。 用户意图是了解在for循环中,if条件满足但elif执行的原因。常见原因包括: 1. 条件逻辑错误:如果if条件满足,elif就不会被检查,因为elif只在if条件不满足时执行。 2. 代码结构问题:elif可能被错误地放置,比如在同一个块中。 3. 变量作用域或值变化:在循环中,变量值可能改变,导致elif条件不满足。 结构回答: - 逐步解释Python的条件判断执行逻辑。 - 提供一个例子说明问题。 - 分析原因。 - 给出解决方案。 - 生成相关问题。 回答结构: 1. 介绍Python条件判断的基本原理。 2. 解释在for循环中ifelif的行为。 3. 分析为什么elif可能不执行。 4. 提供代码示例。 5. 建议如何修复。 6. 生成相关问题。 确保使用中文。</think>### Python for循环中if条件满足但elif执行的原因分析 在Python的`for`循环中,当`if`条件满足时`elif`语句执行,这是由Python的条件判断执行逻辑决定的。下面我将逐步解释原因,并提供解决方案。 #### 1. **Python条件判断的执行逻辑** - Python的条件语句(`if`、`elif`、`else`)是按顺序执行的: - 首先检查`if`条件:如果为真,则执行`if`块,并跳过后续所有`elif`和`else`块。 - 只有当`if`条件为假时,才会检查`elif`条件;如果`elif`为真,则执行其块,并跳过后续条件。 - 如果所有`if`和`elif`都为假,则执行`else`块(如果有)。 - 数学上,这类似于一个互斥的分支结构:如果事件$A$(`if`条件)发生,则事件$B$(`elif`条件)不会被执行,因为程序流程已中断[^1]。 - 在`for`循环中,这一逻辑保持不变:每个迭代独立执行条件判断。 #### 2. **常见原因分析** - **原因1: `if`条件优先执行** 如果`if`条件在某个迭代中为真,`elif`块会被完全跳过,即使它的条件也可能为真。例如: ```python for i in range(3): if i == 0: # 条件满足 print(f"if执行: i={i}") # 输出此行 elif i == 0: # 条件相同,但不会检查 print(f"elif执行: i={i}") # 永远不会执行 ``` 输出:`if执行: i=0`(循环后续迭代可能输出其他内容,但`elif`始终不执行)。 - 这里,`i == 0`同时满足`if`和`elif`条件,但`if`优先执行并阻塞了`elif`。 - **原因2: 条件覆盖错误** 如果`if`和`elif`的条件有重叠,`elif`可能被意外跳过。例如,当变量在循环中变化时: ```python num = 5 for _ in range(1): if num > 3: # 条件满足 print("if执行") num = 2 # 修改num值 elif num < 4: # 条件现在为真,但不会执行 print("elif执行") ``` 输出:`if执行`(`elif`条件`num < 4`为真,但已被跳过)。 - **原因3: 代码结构问题** `elif`必须与`if`在同一代码块中。如果`elif`被错误缩进或放置在`if`块内部,它会被视为嵌套条件,导致逻辑错误: ```python for i in range(2): if i == 0: print("if执行") if i >= 0: # 嵌套if,不是elif print("嵌套if执行") # 这会执行 elif i == 0: # 此elif与外部if关联,但被跳过 print("elif执行") # 不执行 ``` #### 3. **解决方案** - **策略1: 确保条件互斥** 重构条件,避免重叠。使用范围检查或布尔逻辑: ```python for i in range(3): if i == 0: print("处理i=0") elif i == 1: # 条件互斥:i=0时跳过此块 print("处理i=1") ``` - 数学上,这相当于定义离散事件:$P(\text{if}) \cap P(\text{elif}) = \emptyset$。 - **策略2: 使用独立`if`语句** 如果需要同时检查多个可能为真的条件,使用多个独立`if`: ```python for i in range(3): if i == 0: print("if1执行") if i == 0: # 独立if,会执行 print("if2执行") ``` 输出:两个`print`均执行。 - **策略3: 简化循环逻辑** 避免在循环内修改影响条件的变量(如引用[3]建议),或改用`match-case`(Python 3.10+)。 #### 4. **最佳实践** - 在`for`循环中,优先使用互斥条件,减少分支复杂度。 - 调试技巧:添加`print`语句检查变量值,或用调试器逐步执行。 - 参考Python文档:条件语句是“短路”逻辑,类似布尔代数中的$A \rightarrow \neg B$当$A$为真[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值