Python3 条件控制 零基础超详细教程
条件控制,就是让程序拥有「判断能力」—— 根据条件是否成立,选择执行不同的代码。就像生活中:
- 如果下雨 → 带伞出门
- 如果考试及格 → 不用补考
- 如果年龄满 18 岁 → 可以独立办理业务
Python 中用if/elif/else三个关键字实现条件控制,全程靠「缩进」区分代码块,语法非常简洁。
一、前置必记铁则(写错直接报错)
新手 90% 的条件语句报错都来自这几条,务必先记牢:
- 条件行尾必须加英文冒号
:if、elif、else所在的行,末尾必须加冒号,少写直接触发语法错误。 - 靠缩进区分代码块(统一 4 个空格)满足条件才执行的代码,必须向右缩进 4 个空格(官方推荐标准);同一层级的代码缩进必须完全一致。 缩进的这部分代码叫做「代码块」,只有条件成立时才会运行。
- 条件的结果只能是布尔值条件表达式最终只有两种结果:
True(成立 / 真)、False(不成立 / 假)。 通常由比较运算符(> < == != >= <=)、逻辑运算符(and or not)组成。 =和==绝对不能搞混- 单个
=:赋值操作,把右边的值存进左边的变量 - 两个
==:相等判断,专门用来写条件
- 单个
二、4 种条件结构,从简单到复杂
结构 1:单分支 if 语句
最简单的条件逻辑:条件成立就执行代码,不成立就直接跳过。
语法格式
if 条件: 条件成立时执行的代码(必须缩进) 条件成立时执行的代码(必须缩进) # 没有缩进的代码,无论条件是否成立都会执行生活例子:判断是否成年
age = 20 # 判断年龄是否大于等于18 if age >= 18: # 下面两行缩进了,只有条件成立才会运行 print("你已经成年了") print("可以独立办理业务") # 这行没有缩进,不管成不成立都会运行 print("程序结束")运行结果:
你已经成年了 可以独立办理业务 程序结束条件不成立的情况
把年龄改成 15,运行效果:
age = 15 if age >= 18: print("你已经成年了") print("程序结束")运行结果:
程序结束解释:条件不成立,缩进内的代码完全跳过,只执行外面的代码。
结构 2:双分支 if...else... 二选一
条件成立执行 if 里的代码,不成立就执行 else 里的代码,两段代码永远只会运行其中一段。
语法格式
if 条件: 条件成立执行的代码 else: 条件不成立执行的代码例子 1:判断数字奇偶
num = int(input("请输入一个整数:")) # 数字除以2余数为0,就是偶数 if num % 2 == 0: print(f"{num} 是偶数") else: print(f"{num} 是奇数")输入 7,运行结果:
请输入一个整数:7 7 是奇数例子 2:简单密码验证
password = input("请输入密码:") if password == "123456": print("密码正确,登录成功") else: print("密码错误,登录失败")💡 注意:
else后面也要加冒号,而且else不能单独写,必须和if配对使用。
结构 3:多分支 if...elif...else... 多条件依次判断
适合有 3 种及以上情况的场景,从上往下依次判断,只要有一个条件成立,执行对应代码后直接结束整个判断;所有条件都不成立,才执行最后的 else。
语法格式
if 条件1: 条件1成立执行 elif 条件2: 条件2成立执行 elif 条件3: 条件3成立执行 else: 所有条件都不成立执行经典例子:考试成绩评级
规则:90 分及以上优秀,80-89 良好,60-79 及格,60 以下不及格。
score = float(input("请输入考试分数:")) if score >= 90: print("成绩:优秀") elif score >= 80: print("成绩:良好") elif score >= 60: print("成绩:及格") else: print("成绩:不及格")输入 85,运行结果:
请输入考试分数:85 成绩:良好运行逻辑详解(以 85 分为例)
- 先判断
85 >= 90?不成立 → 跳过 - 再判断
85 >= 80?成立 → 打印「良好」,直接结束整个条件判断 - 后面的
elif和else都不会再执行了
⚠️ 新手大坑:多分支的顺序非常重要 条件要按「从严格到宽松」的顺序写,如果反过来写会出现逻辑 bug。 错误示范:
score = 85 if score >= 60: print("及格") elif score >= 90: print("优秀")85 分先满足
>=60,直接输出及格,永远不会走到优秀的判断。
例子:判断月份所属季节
month = int(input("请输入月份(1-12):")) if month in [3,4,5]: print("春天") elif month in [6,7,8]: print("夏天") elif month in [9,10,11]: print("秋天") elif month in [12,1,2]: print("冬天") else: print("输入的月份不合法")结构 4:嵌套 if(if 里面再写 if)
条件分层判断:先满足外层条件,再判断内层条件,一层套一层。每一层都要单独缩进。
语法格式
if 外层条件: 外层成立才执行的代码 if 内层条件: 内层成立才执行的代码 else: 内层不成立执行的代码 else: 外层不成立执行的代码生活例子:网吧上网判断
先判断年龄是否满 18,年龄达标了,再判断有没有带身份证。
age = int(input("请输入你的年龄:")) has_id = input("有没有带身份证?(有/没有):") if age >= 18: print("年龄达标") # 内层判断:只有年龄达标了才会走到这里 if has_id == "有": print("可以正常上网") else: print("没带身份证,不能上网") else: print("未成年,禁止进入网吧")输入年龄 20、身份证没有,运行结果:
请输入你的年龄:20 有没有带身份证?(有/没有):没有 年龄达标 没带身份证,不能上网💡 新手建议:嵌套层数尽量不要超过 3 层,太多层会让代码很难读懂,尽量简化逻辑。
三、多条件组合:and /or/not
复杂判断需要同时满足多个条件,或者满足任意一个条件即可,就要用逻辑运算符组合条件。
1. and:并且,全部成立才成立
两边条件都为 True,整体才是 True;有一个不成立,整体就不成立。
例子:判断年龄是否在 18 到 60 岁之间(招工年龄要求)
age = 25 if age >= 18 and age <= 60: print("符合招工年龄要求") else: print("不符合招工年龄")2. or:或者,一个成立就成立
两边条件任意一个为 True,整体就是 True;全不成立才是 False。
例子:有驾照或者有临时通行证,就能开车上路
has_license = False has_temp_pass = True if has_license or has_temp_pass: print("可以开车上路") else: print("不能开车")3. not:取反,真变假,假变真
把条件的结果反过来。
例子:如果不是周末,就要上班
is_weekend = False if not is_weekend: print("工作日,需要上班")优先级与写法建议
三个逻辑运算符的优先级:not>and>or拿不准的时候,加小括号()最稳妥,永远不会出错。
# 不加括号,先算and再算or print(True or False and False) # True # 加括号,先算or再算and print((True or False) and False) # False四、简写:三元表达式(一行写完 if-else)
如果只是简单的二选一赋值,可以用三元表达式简写,一行写完,代码更简洁。
语法格式
条件成立的结果 if 条件 else 条件不成立的结果例子 1:判断成年 / 未成年
普通写法(4 行):
age = 17 if age >= 18: status = "成年" else: status = "未成年"三元表达式写法(1 行):
age = 17 status = "成年" if age >= 18 else "未成年" print(status) # 未成年例子 2:求两个数的最大值
a = 10 b = 20 max_num = a if a > b else b print(max_num) # 20💡 新手建议:复杂逻辑不要用三元表达式,会降低可读性;只有简单的二选一赋值再使用。
五、pass 空语句(占位专用)
pass是一个空语句,什么都不做,只是占个语法位置。 写代码框架的时候,如果某个分支暂时没想好写什么,直接空着会触发语法报错,用pass占位就可以正常运行。
例子
age = 15 if age >= 18: # 暂时没想好成年分支的逻辑,用pass占位 pass else: print("未成年")如果没有 pass,if 下面是空的,Python 会直接报语法错误。
六、综合实战案例
案例 1:简单登录系统
需求:用户名是admin,密码是123456则登录成功;用户名对但密码错,提示密码错误;用户名不对,提示用户不存在。
username = input("请输入用户名:") password = input("请输入密码:") if username == "admin": if password == "123456": print("登录成功,欢迎回来!") else: print("密码错误,请重试") else: print("用户名不存在")案例 2:判断闰年
闰年规则:能被 4 整除但不能被 100 整除,或者能被 400 整除。
year = int(input("请输入年份:")) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print(f"{year}年是闰年") else: print(f"{year}年是平年")案例 3:快递运费计算
需求:省内首重 1 公斤 6 元,省外首重 1 公斤 8 元;超过 1 公斤的部分,每公斤续重 2 元。
weight = float(input("请输入快递重量(公斤):")) address = input("请输入收货类型(省内/省外):") if address == "省内": if weight <= 1: fee = 6 else: fee = 6 + (weight - 1) * 2 else: if weight <= 1: fee = 8 else: fee = 8 + (weight - 1) * 2 print(f"快递运费为:{fee} 元")七、新手高频易错点总结
- 漏掉冒号:
if、elif、else行尾必须加英文冒号,漏写直接SyntaxError - 缩进混乱:同一代码块缩进必须一致,不能有的 2 格有的 4 格;该缩进的不缩进,不该缩进的乱缩进
=和==搞混:判断相等必须用两个等号==,单个等号是赋值,写在 if 条件里直接报错- 多分支顺序错误:条件要从严格到宽松,否则前面的条件会把后面的完全挡住
- 字符串判断大小写敏感:
"Admin"和"admin"不相等,判断时注意大小写匹配 - 逻辑运算符优先级不清:复杂条件一定要加括号,不要靠记忆优先级
- else 单独使用:else 必须和 if 配对,不能独立出现