当前位置:首页>python>第2.4章:Python的条件判断,看完这篇文章就够了!

第2.4章:Python的条件判断,看完这篇文章就够了!

  • 2026-10-11 06:13:46
第2.4章:Python的条件判断,看完这篇文章就够了!

《Python AI 应用开发入门》第 2.4 节。

使用 if、elif 和 else 根据用户输入选择模型、功能和处理路径。

本节目标

学完本节后,你应当能够:

  1. 1. 使用 if、elif 和 else 控制执行路径。
  2. 2. 正确使用冒号与缩进表示代码块。
  3. 3. 编写互斥条件和嵌套条件。
  4. 4. 识别条件顺序导致的逻辑错误。
  5. 5. 根据用户输入选择模型或程序功能。

1. 程序为什么需要分支

前面的程序基本从上到下执行相同代码。真实应用要根据状态做不同事情:

  • • 输入为空时提示重新输入。
  • • 输入 exit 时结束程序。
  • • 免费用户额度不足时拒绝请求。
  • • 不同任务选择不同模型。

条件判断的基本结构:

question = input("请输入问题:").strip()if question:    print("问题已接收")

只有 question 的真值为真,缩进的代码才会执行。

2. 冒号和缩进

if 条件后必须有英文冒号,属于该分支的代码必须缩进:

if question:    print("正在处理")    print(f"问题长度:{len(question)}")print("程序继续执行")

推荐每一级使用 4 个空格。不要混用 Tab 和空格。

下面代码的含义不同:

if question:    print("正在处理")print("这行无论如何都会执行")

缩进不仅影响排版,更决定程序结构。缩进不合法时可能触发 IndentationError。

3. if 与 else

需要处理真假两种情况时:

question = input("请输入问题:").strip()if question:    print(f"已接收:{question}")else:    print("问题不能为空")

同一组 if/else 只会执行一个分支。

else 不写条件,表示“前面的条件都不成立时”。

4. if、elif、else

多个互斥选项使用 elif:

command = input("请选择功能 add/view/exit:").strip().lower()if command == "add":    print("进入新增消息")elif command == "view":    print("进入查看历史")elif command == "exit":    print("程序结束")else:    print("未知命令")

Python 从上到下检查,遇到第一个为真的分支后就跳过其余分支。

5. 多个独立的 if

三个独立 if 与一组 if/elif 不一样:

text = "Python AI"if "Python" in text:    print("包含 Python")if "AI" in text:    print("包含 AI")

两个条件都为真,因此两行都会输出。

如果条件互斥,只希望选择一条路径,使用 if/elif/else。如果多个规则可以同时成立,使用多个独立 if。

6. 条件顺序很重要

假设根据长度分类:

question_length = 150if question_length > 0:    print("有效输入")elif question_length > 100:    print("长问题")

结果只会是“有效输入”,第二个分支永远没有机会执行。更具体、范围更严格的条件通常放前面:

if question_length > 100:    print("长问题")elif question_length > 0:    print("普通问题")else:    print("空问题")

边界也要明确:

if question_length <= 0:    print("空问题")elif question_length <= 100:    print("普通问题")else:    print("长问题")

测试边界值 0、1、100、101,能发现很多条件错误。

7. 组合条件

question = input("请输入问题:").strip()has_api_key = Trueremaining_quota = 5if question and has_api_key and remaining_quota > 0:    print("可以发送请求")else:    print("当前不能发送请求")

当失败原因不同时,可以分别提示:

if not question:    print("问题不能为空")elif not has_api_key:    print("尚未配置 API Key")elif remaining_quota <= 0:    print("剩余额度不足")else:    print("可以发送请求")

第二种方式更长,但用户能知道具体原因。

8. 嵌套条件

一个条件内部可以继续判断:

is_logged_in = Trueuser_role = "admin"if is_logged_in:    if user_role == "admin":        print("显示管理功能")    else:        print("显示普通功能")else:    print("请先登录")

嵌套适合表达“只有先满足外层条件,才检查内层条件”。但嵌套太深会难读,能用 elif 或组合条件表达时保持扁平。

9. 使用 in 简化多个相等判断

判断退出命令:

command = input("命令:").strip().lower()if command in ("exit", "quit", "q"):    print("程序结束")

不要写成:

# if command == "exit" or "quit":#     print("程序结束")

"quit" 是非空字符串,真值为真,所以错误写法几乎总会进入分支。正确写法是:

if command == "exit" or command == "quit":    print("程序结束")

或使用成员判断。

10. 模型选择器

创建一个按任务选择模型的程序:

task = input("任务类型 chat/code/summary:").strip().lower()quality = input("质量偏好 fast/balanced/high:").strip().lower()if task not in ("chat", "code", "summary"):    print("不支持的任务类型")elif quality == "fast":    selected_model = "demo-mini"    print(f"已选择:{selected_model}")elif task == "code" or quality == "high":    selected_model = "demo-pro"    print(f"已选择:{selected_model}")else:    selected_model = "demo-standard"    print(f"已选择:{selected_model}")

先验证输入是否合法,再应用模型规则。这里的模型名只是课程示例,不代表真实服务。

11. 条件表达式

简单的二选一可以写成条件表达式:

message_count = 3status = "有历史消息" if message_count > 0 else "暂无消息"

它适合短小、清楚的赋值。复杂分支仍应使用普通 if,不要为了少写几行而牺牲可读性。

12. 调试条件

条件没有按预期执行时,先输出参与判断的值和类型:

remaining_quota = input("剩余额度:")print(remaining_quota)print(type(remaining_quota))

input() 返回字符串,所以直接与整数比较会失败:

# if remaining_quota > 0:#     print("额度充足")

应先转换:

remaining_quota = int(remaining_quota)

常见检查项:

  • • 输入是否有两端空格。
  • • 大小写是否统一。
  • • 数据类型是否正确。
  • • = 与 == 是否混淆。
  • • 条件顺序和边界是否正确。
  • • 缩进是否属于预期分支。

动手练习

练习 1:模型选择器

创建 model_selector.py:

  • • 1:快速问答,选择 demo-mini。
  • • 2:复杂推理,选择 demo-pro。
  • • 3:长文总结,选择 demo-long。
  • • 其他输入:提示“无效选项”,不选择模型。

使用 f-string 输出最终结果。

练习 2:问题校验器

接收用户问题并按顺序处理:

  1. 1. 去除两端空格。
  2. 2. 如果为空,提示不能为空。
  3. 3. 如果超过 200 个字符,提示过长。
  4. 4. 如果输入是 exit,提示退出。
  5. 5. 否则显示“问题已接收”及字符数。

思考:exit 分支放在长度判断前后是否影响结果?

练习 3:修复条件 Bug

修复下面程序:

command = input("命令:").strip().lower()if command == "exit" or "quit":print("程序结束")else:    print("继续运行")

至少有一个逻辑问题和一个语法结构问题。

随堂小测

  1. 1. if 后为什么必须有冒号和缩进?
  2. 2. 一组 if/elif/else 最多会执行几个分支?
  3. 3. 多个独立 if 与 elif 有什么区别?
  4. 4. 为什么更具体的范围条件通常放前面?
  5. 5. if command == "exit" or "quit": 为什么错误?
  6. 6. 条件没有按预期执行时应该检查哪些信息?

参考答案

  1. 1. 冒号开始代码块,缩进标记哪些语句属于该分支。
  2. 2. 最多一个。
  3. 3. 多个独立 if 可以分别执行;一组 elif 只执行第一个满足的分支。
  4. 4. 前面的宽泛条件可能先匹配,使后面的具体条件永远无法执行。
  5. 5. "quit" 是真值为真的非空字符串,并没有与 command 比较。
  6. 6. 参与判断的值、类型、空格和大小写、比较符、条件顺序、边界与缩进。

本节完成检查

  • • 我能写出正确缩进的条件代码。
  • • 我理解 if、elif、else 的执行规则。
  • • 我能组合条件并给出具体失败原因。
  • • 我测试了至少四个边界值。
  • • 我完成了模型选择器。
  • • 我修复了练习中的条件 Bug。

最新文章

随机文章