《Python AI 应用开发入门》第 2.4 节。
使用 if、elif 和 else 根据用户输入选择模型、功能和处理路径。
本节目标
学完本节后,你应当能够:
- 1. 使用
if、elif 和 else 控制执行路径。
1. 程序为什么需要分支
前面的程序基本从上到下执行相同代码。真实应用要根据状态做不同事情:
条件判断的基本结构:
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:
使用 f-string 输出最终结果。
练习 2:问题校验器
接收用户问题并按顺序处理:
思考:exit 分支放在长度判断前后是否影响结果?
练习 3:修复条件 Bug
修复下面程序:
command = input("命令:").strip().lower()if command == "exit" or "quit":print("程序结束")else: print("继续运行")
至少有一个逻辑问题和一个语法结构问题。
随堂小测
- 2. 一组
if/elif/else 最多会执行几个分支? - 5.
if command == "exit" or "quit": 为什么错误?
参考答案
- 1. 冒号开始代码块,缩进标记哪些语句属于该分支。
- 3. 多个独立
if 可以分别执行;一组 elif 只执行第一个满足的分支。 - 4. 前面的宽泛条件可能先匹配,使后面的具体条件永远无法执行。
- 5.
"quit" 是真值为真的非空字符串,并没有与 command 比较。 - 6. 参与判断的值、类型、空格和大小写、比较符、条件顺序、边界与缩进。
本节完成检查
- • 我理解
if、elif、else 的执行规则。