Python if

267 阅读5分钟

Python 的 if 语句是条件判断语句,用于根据不同条件执行不同的代码块,是编程中最基础且核心的语法之一。以下从基本结构、常见用法、进阶技巧三部分详细讲解,附带实战示例。

一、基本结构

if 语句的核心逻辑是:满足条件就执行对应的代码块,不满足则跳过。Python 中通过缩进(通常是 4 个空格)区分代码块,而非大括号 {}

1. 单分支:if 语句

仅当条件为 True 时执行代码块,条件为 False 时不执行。

python

运行

# 语法格式
if 条件表达式:
    代码块(缩进)

示例:判断数字是否为正数

python

运行

num = 10
if num > 0:
    print(f"{num} 是正数")  # 条件成立,执行此句
    print("条件判断结束")    # 同属 if 代码块,也会执行

print("程序结束")  # 无缩进,不属于 if 块,必定执行

输出

plaintext

10 是正数
条件判断结束
程序结束

2. 双分支:if-else 语句

满足条件执行 if 块,不满足则执行 else 块(二选一)。

python

运行

# 语法格式
if 条件表达式:
    代码块1(条件成立时执行)
else:
    代码块2(条件不成立时执行)

示例:判断数字正负

python

运行

num = -3
if num > 0:
    print(f"{num} 是正数")
else:
    print(f"{num} 不是正数(可能是负数或0)")

输出

plaintext

-3 不是正数(可能是负数或0)

3. 多分支:if-elif-else 语句

多个条件依次判断,满足第一个条件后执行对应代码块,后续条件不再判断(多选一)。

python

运行

# 语法格式
if 条件1:
    代码块1
elif 条件2:
    代码块2
elif 条件3:
    代码块3
...
else:
    代码块N(所有条件都不成立时执行)

示例:成绩等级判断

python

运行

score = 85
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")  # 85 满足此条件,执行后跳过后续判断
elif score >= 60:
    print("及格")
else:
    print("不及格")

输出

plaintext

良好

二、条件表达式的合法形式

if 后的条件表达式必须返回布尔值(True/False),常见写法有:

1. 比较运算符

运算符含义示例
==等于(注意是两个等号)5 == 5 → True
!=不等于5 != 3 → True
>大于7 > 2 → True
<小于3 < 9 → True
>=大于等于4 >= 4 → True
<=小于等于6 <= 8 → True

注意== 是判断相等,= 是赋值,不要混淆!

python

运行

# 错误示例:用 = 做判断(语法错误)
if num = 10:  # SyntaxError: invalid syntax

# 正确示例:用 == 做判断
if num == 10:
    print("num 等于 10")

2. 逻辑运算符(多条件组合)

运算符含义优先级示例(a=True, b=False)
and逻辑与(都真才真)a and b → False
or逻辑或(一真就真)a or b → True
not逻辑非(取反)最高not a → False

示例:判断成绩是否在 [60, 80) 之间

python

运行

score = 75
if score >= 60 and score < 80:
    print("成绩及格且未达到良好")

3. 成员运算符(判断是否在序列中)

运算符含义示例
in存在于序列中3 in [1,2,3] → True
not in不存在于序列中5 not in (1,2,3) → True

示例:判断用户名是否在白名单中

python

运行

white_list = ["admin", "user1", "user2"]
username = "user3"
if username in white_list:
    print("允许登录")
else:
    print("禁止登录")

4. 布尔值直接判断

  • 空值(None)、0、空序列([]/""/()/{})会被视为 False
  • 非空值、非 0 数字、非空序列会被视为 True

示例:判断列表是否非空

python

运行

nums = [1,2,3]
if nums:  # 等价于 if len(nums) > 0:
    print("列表非空")
else:
    print("列表为空")

三、进阶用法

1. 嵌套 if 语句

在 if/else 代码块中再嵌套一层或多层 if 语句,用于更复杂的条件判断。

示例:判断是否为闰年(嵌套逻辑)

python

运行

year = 2024
if year % 4 == 0:
    if year % 100 == 0:
        if year % 400 == 0:
            print(f"{year} 是闰年")
        else:
            print(f"{year} 不是闰年")
    else:
        print(f"{year} 是闰年")
else:
    print(f"{year} 不是闰年")

输出

plaintext

2024 是闰年

2. 三元运算符(简洁版 if-else)

用于简单的二选一赋值场景,语法更简洁(一行搞定)。

python

运行

# 语法格式:变量 = 表达式1 if 条件 else 表达式2
# 条件成立 → 变量=表达式1;不成立 → 变量=表达式2

示例:求两个数的最大值

python

运行

a = 15
b = 20
max_num = a if a > b else b
print(max_num)  # 输出:20

3. 多条件简化(in 替代多个 or)

当多个 or 条件是判断 “是否属于某个集合” 时,用 in 更简洁。

python

运行

# 繁琐写法
if fruit == "苹果" or fruit == "香蕉" or fruit == "橙子":
    print("是常见水果")

# 简洁写法
if fruit in ["苹果", "香蕉", "橙子"]:
    print("是常见水果")

四、常见错误与注意事项

  1. 缩进错误:Python 严格依赖缩进,同一代码块的缩进必须一致(推荐 4 个空格,不要混合空格和 Tab)。

    python

    运行

    # 错误示例:缩进不一致
    if num > 0:
        print("正数")
      print("结束")  # IndentationError: unexpected indent
    
  2. 冒号遗漏if/elif/else 后必须加冒号 :,否则语法错误。

    python

    运行

    if num > 0  # SyntaxError: invalid syntax(缺少冒号)
        print("正数")
    
  3. 条件表达式的 “陷阱”

    • 不要用 == 判断浮点数(浮点数有精度误差),改用差值小于阈值:

      python

      运行

      # 错误:0.1 + 0.2 不等于 0.3
      if 0.1 + 0.2 == 0.3:  # False
          print("相等")
      # 正确:差值小于 1e-9 视为相等
      if abs((0.1 + 0.2) - 0.3) < 1e-9:  # True
          print("相等")
      
    • is 与 == 的区别:is 判断内存地址是否相同,== 判断值是否相同(仅小整数 / 字符串可能复用内存):

      python

      运行

      a = 10
      b = 10
      print(a == b)  # True(值相等)
      print(a is b)  # True(小整数复用内存)
      
      c = [1,2,3]
      d = [1,2,3]
      print(c == d)  # True(值相等)
      print(c is d)  # False(不同列表,内存地址不同)