1. if 语句的基本语法
Python 中的 if 语句用于 根据条件是否成立来决定某段代码要不要执行。先看最基础的形式:
age = 18
if age >= 18:
print("已成年")
- if 后面:跟一个“条件表达式”(结果是 True 或 False)
- 条件后面:必须加冒号
: - 下一行开始:用缩进(一般 4 个空格)写需要在条件成立时执行的代码
注意:
- 缩进非常重要:Python 通过缩进来判断哪些语句属于 if 的代码块。
- 同一代码块内的多行代码缩进要一致。
再看一个带 else 的例子:
age = 16
if age >= 18:
print("已成年")
else:
print("未成年")
- if 分支:条件为 True 时执行
- else 分支:条件为 False 时执行(兜底情况)
2. if / elif / else 多分支结构
当我们有多种情况时,可以使用 elif:
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
执行流程:
- 先判断第一个
if条件 - 如果为 False,继续判断第一个
elif - 依次往下判断
- 只会执行第一个条件为 True 的分支,后面的分支即使条件也为 True,也不会再执行
3. 布尔表达式与布尔值
3.1 布尔值 True / False
Python 中有两个布尔值:
True:表示“真”False:表示“假”
布尔值常见来源:
- 比较运算:
==、!=、>、<、>=、<= - 逻辑运算:
and、or、not - 直接写常量:
True、False
例如:
print(3 > 2) # True
print(3 == 2) # False
print(5 != 3) # True
3.2 “布尔表达式”是什么?
布尔表达式:计算结果是布尔值(True/False)的表达式。
常见例子:
age = 20
age >= 18 # True
age < 0 # False
age == 20 # True
age != 18 # True
这些表达式经常用在 if、while 等条件判断中。
4. 比较运算符与常见误区
4.1 == 与 = 的区别(新手高频错误)
=:赋值运算,把右边的值“存到”左边的变量里==:比较运算,判断“是否相等”
错误示例(会报语法错误):
age = 18
# 错误写法:if age = 18:
# 这是赋值,不是比较,Python 会报错
if age == 18:
print("年龄是 18")
记住:在 if 里判断相等,一定要用 ==,不是 =。
5. 逻辑运算符:and、or、not
Python 中的逻辑运算符:
and:并且or:或者not:取反
5.1 and:两个条件都要为 True
age = 20
has_id_card = True
if age >= 18 and has_id_card:
print("允许进入网吧")
else:
print("不允许进入网吧")
age >= 18为 True 且has_id_card为 True,整个条件才是 True。
真值表(方便理解):
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
5.2 or:只要有一个为 True 即为 True
is_vip = False
has_coupon = True
if is_vip or has_coupon:
print("可以享受折扣")
else:
print("不享受折扣")
真值表:
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
5.3 not:把 True 变 False,把 False 变 True
is_rainy = True
if not is_rainy:
print("可以出去玩")
else:
print("下雨了,在家待着")
not True->Falsenot False->True
5.4 “!和 not 有什么区别?”
在 Python 中:
- 使用
not表示逻辑非(取反) - 不要使用
!,单独的!是语法错误
# 正确
flag = True
print(not flag) # False
# 错误:Python 里这样会报错
# print(!flag)
结论:
- Python 用
not,别用! - 其他很多语言(如 C / C++ / Java / JavaScript)用
!,别用not
6. 条件表达式中“相等”和“不等”的效率问题
理论上,大多数情况下,使用 == 和 != 的效率差别极小,可以忽略。
但是在一些逻辑设计中:
- 多数情况下条件为真:可以用更常见的情况写在前面
- 有时用“不等”更自然,例如:
status = "running"
# 写法 1:检查是否等于某个值
if status == "stopped":
print("已停止")
else:
print("未停止")
# 写法 2:检查是否不等于某个值
if status != "stopped":
print("正在运行或其他状态")
else:
print("已停止")
当“非某个值”的情况更多时,使用 != 会让逻辑更清晰,可读性更高,有时也能减少判断次数。
7. 检查值是否在列表中:in / not in
当你要判断“某个值是否存在于一个列表(或字符串、元组、集合)中”时,使用 in 和 not in。
7.1 in:判断是否包含
fruits = ["apple", "banana", "orange"]
if "apple" in fruits:
print("有苹果")
也可以用于字符串:
text = "hello python"
if "python" in text:
print("包含 python 这个单词")
7.2 not in:判断是否不包含
blocked_users = ["bad_guy", "spammer"]
user = "alice"
if user not in blocked_users:
print("允许登录")
else:
print("账号被封禁")
7.3 in / not in 常见错误
错误示例:
fruits = ["apple", "banana"]
# 错误示例:if fruits in "apple":
# 这是在判断整个列表是否在字符串中,逻辑错误
正确示例:
if "apple" in fruits:
print("有苹果")
8. := 运算符(海象运算符)
8.1 := 是什么意思?
:= 是 Python 3.8 引入的 海象运算符(walrus operator)。
作用:一边给变量赋值,一边返回这个值。
也可以理解为:“在表达式里面顺便赋值”。
普通赋值:
name = input("请输入你的名字:")
if name:
print("你好,", name)
使用 :=:
if name := input("请输入你的名字:"):
print("你好,", name)
这里:
name := input(...)会先执行input(...),得到用户输入- 然后把结果赋值给
name - 同时整个表达式的值就是这个输入的内容
if再判断这个内容是否为“真”(非空字符串为 True,空字符串为 False)
8.2 := 的典型使用场景
场景 1:避免重复计算
不使用 :=:
line = input("请输入内容(输入 quit 退出):")
while line != "quit":
print("你输入了:", line)
line = input("请输入内容(输入 quit 退出):")
使用 :=:
while (line := input("请输入内容(输入 quit 退出):")) != "quit":
print("你输入了:", line)
这样可以把“获取输入”和“判断是否退出”合并在一行中,更紧凑。
场景 2:在 if 条件中顺便计算并复用
data = "hello"
if (length := len(data)) > 3:
print("字符串长度为:", length)
这里:
length := len(data)计算长度并赋值给length- 然后用这个长度和 3 比较
- 条件为 True 后还能在 if 代码块中继续使用
length,不用再算一次
8.3 使用 := 的注意事项
- 代码可读性很重要,新手如果觉得看不懂,可以先不用
:=,按普通方式写。 - 不要在一行里写太复杂的表达式,避免难以调试。
- 使用
:=要求 Python 版本是 3.8 及以上。
9. and / or / not 的常见陷阱与注意事项
9.1 and / or 不仅仅返回 True / False
在 Python 中,and / or 实际上会返回 操作数本身,而不仅仅是布尔值。
示例:
print(1 and 2) # 2
print(0 and 2) # 0
print("" or "abc") # "abc"
print("hi" or "abc") # "hi"
虽然在 if 条件判断里,这些值会被当作布尔值使用,但你要知道:
and返回第一个为 False 的值,若都为 True,则返回最后一个值or返回第一个为 True 的值,若都为 False,则返回最后一个值
初学者建议:
- 在
if条件里放心用and/or - 在赋值表达式中使用时,要知道它返回的是哪个值,不只是 True / False
9.2 短路(lazy evaluation)行为
and 和 or 都有“短路”行为:
A and B中,如果 A 为 False,B 不会再计算A or B中,如果 A 为 True,B 不会再计算
示例:
def f():
print("函数 f 被调用")
return True
print(False and f()) # f 不会被调用
print(True or f()) # f 不会被调用
在条件判断里,这个特性有时可以用来避免不必要的计算,但初学者先记住:
- 逻辑判断是从左到右
- 一旦可以确定结果,就不会再判断后面的条件
9.3 布尔表达式中混合 and / or 时的优先级
优先级:not > and > or
flag = True
result = not flag or False and True
真实计算顺序:
- 先算
not flag - 再算
False and True - 最后算
或(or)
为了避免混乱,强烈推荐使用括号:
result = (not flag) or (False and True)
当你写出比较复杂的逻辑条件时,一定要用括号明确优先级,给自己和别人都留一点“可读性”。
10. if 条件中的“真”和“假”(真值判断)
在 Python 中,以下值会被当作“假”(False):
False(包括 0.0)None- 空字符串
"" - 空列表
[] - 空元组
() - 空字典
{} - 空集合
set()
除了这些,其他都被当作“真”(True)。
示例:
items = []
if items:
print("有数据")
else:
print("列表是空的")
等价于:
if len(items) > 0:
print("有数据")
else:
print("列表是空的")
很多时候,Pythonic 的写法会更简洁:
name = ""
if not name:
print("名字不能为空")
11. 实战案例 1:登录验证
需求:
- 用户输入用户名和密码
- 用户名必须在允许的用户列表中
- 密码不能是空字符串
示例代码:
allowed_users = ["alice", "bob", "charlie"]
username = input("请输入用户名:")
password = input("请输入密码:")
if username in allowed_users and password != "":
print("登录成功")
else:
print("登录失败:用户名或密码错误")
逐行解释:
username in allowed_users:检查用户名是否存在于允许列表中password != "":检查密码是否不是空字符串- 使用
and:两个条件都满足才算登录成功
12. 实战案例 2:成绩评定 + 海象运算符
需求:
- 连续输入学生成绩(0~100 的整数)
- 输入
-1表示结束 - 根据成绩输出等级
while (score_str := input("请输入成绩(输入 -1 结束):")) != "-1":
# 转成整数
score = int(score_str)
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
这里:
- 使用
:=一边读取输入,一边作为while条件判断 - 输入不是
-1时,进入循环并根据成绩输出等级
13. 实战案例 3:黑名单与白名单(in / not in)
需求:
- 某个系统里,有“白名单用户”和“黑名单用户”
- 如果在黑名单里,直接拒绝
- 否则,如果在白名单里,允许访问
- 其余人需要申请
whitelist = ["admin", "vip_user"]
blacklist = ["bad_guy", "spammer"]
user = input("请输入用户名:")
if user in blacklist:
print("访问被拒绝:你在黑名单中")
elif user in whitelist:
print("欢迎,白名单用户,可以直接访问")
else:
print("你不在白名单中,请先申请权限")
这里依赖:
in:检查是否在列表中elif:多分支逻辑- 条件判断顺序很重要:先判黑名单,再判白名单
14. 常见陷阱与总结性建议
14.1 常见陷阱
- 用
=代替==- 错误:
if x = 1: - 正确:
if x == 1:
- 错误:
- 在 Python 中使用
!- 错误:
if !flag: - 正确:
if not flag:
- 错误:
- 忘记冒号
:- 错误:
if x > 0 - 正确:
if x > 0:
- 错误:
- 缩进不一致
- 同一个 if 代码块里的语句要保持相同缩进(一般 4 个空格)
- 复杂条件不加括号
- 容易搞不清优先级,建议多用括号明确逻辑