11.Python中if语句完全指南

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:表示“假”

布尔值常见来源:

  • 比较运算:==!=><>=<=
  • 逻辑运算:andornot
  • 直接写常量:TrueFalse

例如:

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

这些表达式经常用在 ifwhile 等条件判断中。

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 -> False
  • not 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

当你要判断“某个值是否存在于一个列表(或字符串、元组、集合)中”时,使用 innot 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)行为

andor 都有“短路”行为:

  • 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 个空格)
  • 复杂条件不加括号
    • 容易搞不清优先级,建议多用括号明确逻辑

发表评论