Skip to content

运算符与控制流

变量存了值,接下来就要做两件事:对值做计算(运算符),根据结果决定走哪条路(控制流)。这两块是写任何逻辑的基础——判断待办是否完成、循环处理一批联系人、重试一个失败的操作,都靠它们。

一、运算符

算术运算符:

python
print(10 + 3)     # 13 加
print(10 - 3)     # 7  减
print(10 * 3)     # 30 乘
print(10 / 3)     # 3.333... 除(结果永远是 float)
print(10 // 3)    # 3  整除(向下取整)
print(10 % 3)     # 1  取余
print(2 ** 3)     # 8  幂运算(2 的 3 次方)

/// 要分清:/ 是真除法,结果一定是小数(哪怕能整除,10 / 2 也是 5.0);// 是整除,直接砍掉小数部分。统计"平均每人几条"这种场景,两者结果不一样。

比较运算符,结果是布尔值:

python
age = 18

print(age >= 18)        # True
print(age == 18)        # True(注意是两个等号,一个等号是赋值)
print(age != 20)        # True

新手最容易犯的错:把 = 当成"等于"。一个 = 是赋值(age = 18),两个 == 才是判断相等(age == 18)。写成 if age = 18: 会直接报错,这反而是好事——有些语言里这种写法不报错,bug 更隐蔽。

逻辑运算符,组合多个条件:

python
count = 5
done = True

print(count > 0 and done)    # True(两个都成立)
print(count > 10 or done)    # True(至少一个成立)
print(not done)              # False(取反)

注意 Python 用英文单词 and/or/not,不是 &&/||/!——从 Shell 或 C 过来的人容易写错。

成员运算符 in,判断某个东西在不在一组里:

python
tags = ["工作", "重要", "本周"]

print("工作" in tags)        # True
print("私人" not in tags)    # True

in 在 Python 里用得极多——判断列表里有没有某个元素、字符串里有没有某个子串、字典里有没有某个 key,都用它。

二、条件判断

if / elif / else 处理分支:

python
priority = 2

if priority == 1:
    level = "高"
elif priority == 2:
    level = "中"
else:
    level = "低"

print(f"优先级: {level}")  # 优先级: 中

Python 里这些值会被当作"假":0、空字符串 ""、空列表 []、空字典 {}NoneFalse。其他值都是"真"。这个规则记住,写条件判断会简洁很多:

python
title = ""

if not title:
    print("标题是空的")  # 会执行,因为空字符串是"假"

不用写 if title == "":,直接 if not title: 更地道。

三元表达式,适合很短的二选一:

python
count = 5
status = "有任务" if count > 0 else "无任务"

但条件一复杂,还是老老实实写 if代码是给人读的,一行硬塞太多逻辑,排查时反而费劲

三、for 循环

遍历一个列表:

python
todos = ["写周报", "回邮件", "开会"]

for todo in todos:
    print(f"- {todo}")

遍历字典:

python
contacts = {
    "张三": "13800000001",
    "李四": "13800000002",
}

for name, phone in contacts.items():
    print(f"{name}: {phone}")

items() 是遍历字典同时拿到 key 和 value 的标准写法——只写 for x in contacts: 拿到的是 key,经常踩坑。

带序号遍历,用 enumerate:

python
for index, todo in enumerate(todos, start=1):
    print(f"{index}. {todo}")

range() 生成一段数字序列,适合"重复 N 次"或按数字遍历:

python
for i in range(3):       # 0, 1, 2
    print(f"第 {i + 1} 次重试")

for n in range(2, 5):    # 2, 3, 4
    print(n)

四、while 循环

while 适合"次数不固定,满足条件就一直做"的场景——重试、轮询、排队:

python
import time

retry = 0
max_retry = 3

while retry < max_retry:
    print(f"第 {retry + 1} 次尝试")
    retry += 1
    time.sleep(1)

while 循环一定要确保退出条件最终会满足。如果条件永远为真,就是死循环,程序卡住不动。最常见的原因是忘了在循环体里更新变量(比如忘了 retry += 1)。

五、break 和 continue

break 直接跳出整个循环,continue 跳过本次、继续下一次:

python
# 找到第一个已完成的待办就停
for todo in todos:
    if "已完成" in todo:
        print(f"找到完成的: {todo}")
        break

# 跳过已完成的,只处理未完成的
for todo in todos:
    if "已完成" in todo:
        continue
    print(f"处理: {todo}")

这两个用好了能让循环逻辑简洁,用多了会让代码难读。嵌套循环里用 break 只跳出最内层,这是个容易误解的点——想一次跳出多层循环,通常得借助标志变量或者把内层循环抽成函数。