前言
上一篇我们完成了 Python 环境搭建,并认识了数字、字符串、列表等核心数据类型。有了数据,下一步自然就是对数据进行运算和判断——这就是运算符和条件语句的用武之地。
运算符让你能"算",条件语句让你能"想"。两者结合,代码就开始有了逻辑。
本文是 Python 零基础入门系列的第二篇,建议先阅读 第一篇:环境搭建、初体验与数据类型,再来看这一篇,衔接会更顺畅。
一、运算符
Python 的运算符可以分成六大类:算术、比较、赋值、逻辑、成员、身份。逐一过一遍,每种写几个例子就记住了。
1.1 算术运算符
最基础的一类,日常写代码几乎每行都会碰到:
a = 10b = 3print(a + b) # 加 → 13print(a - b) # 减 → 7print(a * b) # 乘 → 30print(a / b) # 除 → 3.3333...(总是返回 float)print(a // b) # 整除 → 3(向下取整)print(a % b) # 取余 → 1print(a ** b) # 幂 → 1000(10 的 3 次方)
两个容易混淆的点:
- •
/ 总是返回浮点数,即使能整除:10 / 2 结果是 5.0 而不是 5。 - •
// 是向下取整,不是丢掉小数部分:-10 // 3 结果是 -4(因为 -3.333... 向下取整是 -4)。
1.2 比较运算符
比较运算的结果永远是布尔值 True 或 False:
x = 5y = 10print(x == y) # 等于 → Falseprint(x != y) # 不等于 → Trueprint(x > y) # 大于 → Falseprint(x < y) # 小于 → Trueprint(x >= 5) # 大于等于 → Trueprint(x <= 3) # 小于等于 → False# 链式比较(Python 的特色语法)age = 25print(18 <= age <= 60) # True,等价于 age >= 18 and age <= 60
链式比较是 Python 的一大语法糖,a < b < c 在 Python 中是合法的,等价于 a < b and b < c,写起来既简洁又符合数学直觉。
1.3 赋值运算符
除了最基础的 =,Python 还提供一系列复合赋值运算符,本质上就是"先运算,再赋值"的缩写:
x = 10x += 3 # x = x + 3 → 13x -= 2 # x = x - 2 → 11x *= 4 # x = x * 4 → 44x /= 2 # x = x / 2 → 22.0x //= 3 # x = x // 3 → 7.0x %= 3 # x = x % 3 → 1.0x **= 2 # x = x ** 2 → 1.0# 海象运算符 :=(Python 3.8+)# 在表达式中同时完成赋值和取值if (n := len("hello")) > 3: print(f"字符串长度为 {n},大于 3") # 字符串长度为 5,大于 3
海象运算符 := 的名字来自它长得像海象的眼睛和獠牙。它能在 if 或 while 等表达式中边赋值边判断,减少重复代码。
1.4 逻辑运算符
Python 用英文单词而非符号表示逻辑运算,可读性拉满:
a = Trueb = Falseprint(a and b) # 与 → False(两边都为 True 才为 True)print(a or b) # 或 → True(至少一边为 True)print(not a) # 非 → False(取反)# 短路求值print(False and 1/0) # False,不会执行 1/0,因为左边已经是 Falseprint(True or 1/0) # True,不会执行 1/0,因为左边已经是 True
短路求值是 Python 的性能优化机制:and 左边为 False 时右边不执行,or 左边为 True 时右边不执行。利用这个特性可以写出简洁的代码:
# 如果 name 为空,使用默认值display_name = name or "匿名用户"# 如果列表非空,取第一个元素first = items and items[0]
1.5 成员运算符
用 in 和 not in 判断某个元素是否在容器中:
fruits = ["苹果", "香蕉", "橘子"]print("苹果" in fruits) # Trueprint("葡萄" not in fruits) # True# 字符串也适用text = "Hello Python"print("Py" in text) # Trueprint("py" in text) # False(区分大小写)# 字典判断的是 keystudent = {"name": "小明", "age": 20}print("name" in student) # Trueprint("小明" in student) # False(不判断 value)
1.6 身份运算符
is 和 is not 判断两个变量是否指向同一个对象(比较内存地址),而不是值是否相等:
a = [1, 2, 3]b = [1, 2, 3]c = aprint(a == b) # True(值相等)print(a is b) # False(两个不同的列表对象)print(a is c) # True(c 就是 a)# 小整数缓存机制(-5 到 256)x = 256y = 256print(x is y) # True(Python 缓存了小整数)x = 257y = 257print(x is y) # False(超出缓存范围,是两个不同对象)
经验法则:比较值用 ==,判断是不是 None 才用 is。if x is None 是 Python 社区公认的最佳实践,比 if x == None 更快更安全。
1.7 运算符优先级速查表
写复杂表达式时,优先级容易搞混。一张表搞定:
| | |
|---|
| ** | |
| +x | |
| * | |
| + | |
| << | |
| & | |
| ^ | |
| | | |
| ==, !=, >, <, >=, <=, is, in | |
| not | |
| and | |
| or | |
记不住也没关系——加括号就行了。(a + b) * c 永远比 a + b * c 更清晰。
二、条件判断
运算符让代码能"算",条件判断则让代码能"想"。根据不同的条件执行不同的代码,程序才有了智能。
2.1 if / elif / else
Python 条件判断的基本结构:
score = 85if score >= 90: grade = "A"elif score >= 80: grade = "B"elif score >= 70: grade = "C"elif score >= 60: grade = "D"else: grade = "F"print(f"成绩等级:{grade}") # 成绩等级:B
关键规则:
- • 条件为
True 的代码块必须缩进(通常 4 个空格) - • 从上到下依次判断,命中第一个
True 后不再往下走
2.2 三元表达式(条件表达式)
有些简单的 if-else 可以用一行写完:
# 传统写法if score >= 60: result = "及格"else: result = "不及格"# 三元表达式(一行搞定)result = "及格" if score >= 60 else "不及格"
语法是 值1 if 条件 else 值2,和其他语言 条件 ? 值1 : 值2 顺序不同,刚开始容易写反,多练几次就好了。
2.3 条件判断中的"真值"测试
在 Python 中,任何对象都可以放在 if 后面做判断。以下值被视为 False(称为"假值"):
# 所有假值bool(0) # Falsebool(0.0) # Falsebool("") # False —— 空字符串bool([]) # False —— 空列表bool({}) # False —— 空字典bool(set()) # False —— 空集合bool(None) # Falsebool(False) # False# 其他所有值都视为 Truebool(1) # Truebool(-1) # Truebool(" ") # True(空格不是空字符串)bool([0]) # True(包含元素就不是空列表)
利用这个特性,可以写出非常 Pythonic 的代码:
# 检查列表是否为空items = []if not items: print("列表为空,请先添加数据")# 检查字符串name = ""if not name: name = "默认用户"# 等价于name = name or "默认用户"
2.4 嵌套条件与多条件组合
# 多条件组合age = 22has_ticket = Trueis_vip = Falseif is_vip: print("VIP 通道,直接入场")elif age >= 18 and has_ticket: print("成人票,请入场")elif age >= 18 and not has_ticket: print("请先购票")elif age < 18: print("未成年观众请由家长陪同")
条件复杂时,建议提前用变量存储判断结果,既好读又好调试:
# 不推荐:条件全挤在 if 里if user.is_active and user.age >= 18 and (user.has_permission or user.is_admin): ...# 推荐:拆成有意义的变量is_adult = user.age >= 18has_access = user.has_permission or user.is_adminif user.is_active and is_adult and has_access: ...
2.5 match-case(Python 3.10+)
Python 3.10 引入了类似其他语言 switch-case 的模式匹配:
# 传统写法http_status = 404if http_status == 200: message = "OK"elif http_status == 404: message = "Not Found"elif http_status == 500: message = "Internal Server Error"else: message = "Unknown"# match-case 写法(Python 3.10+)match http_status: case 200: message = "OK" case 404: message = "Not Found" case 500: message = "Internal Server Error" case _: # _ 是通配符,类似 else message = "Unknown"print(message) # Not Found
match-case 的能力远不止简单匹配,它还支持解构、守卫条件等高级用法。初级阶段先掌握上面这种基本匹配即可,后续我们会专门写一篇深入讲解模式匹配。
三、综合示例:做一个简易计算器
把运算符和条件判断结合起来,来实现一个命令行简易计算器:
print("=== 简易计算器 ===")print("支持运算:+ - * /")print("输入 'q' 退出")while True: expr = input("\n请输入算式(如 1 + 2):").strip() if expr.lower() == 'q': print("再见!") break if not expr: print("输入为空,请重新输入") continue # 简单的字符串解析 parts = expr.split() if len(parts) != 3: print("格式错误,请按 '数字 运算符 数字' 格式输入") continue try: a = float(parts[0]) op = parts[1] b = float(parts[2]) except ValueError: print("数字解析失败,请检查输入") continue # 根据运算符执行计算 if op == '+': result = a + b elif op == '-': result = a - b elif op == '*': result = a * b elif op == '/': if b == 0: print("错误:除数不能为 0") continue result = a / b else: print(f"不支持的运算符:{op}") continue print(f"结果:{a} {op} {b} = {result}")
这个小程序虽然只有 30 多行,已经涵盖了算术运算、比较运算、条件判断、循环、异常处理等知识点。你可以把它作为模板,往上加新功能(比如取余 %、幂运算 **)。
四、动手练习
试试这几道题,检验一下运算符和条件判断的掌握程度:
- 1. 写一个程序,输入一个年份,判断是否为闰年(规则:能被 4 整除但不能被 100 整除,或者能被 400 整除)。
- 2. 用户输入三个数字,输出其中的最大值(不用
max() 函数,用 if-else 实现)。 - 3. 写一个 BMI 计算器:输入身高(m)和体重(kg),计算 BMI 并根据标准输出评价(偏瘦 / 正常 / 偏胖 / 肥胖)。
- 4. 输入一个字符,判断它是大写字母、小写字母、数字还是其他字符(提示:用字符串方法
isupper()、islower()、isdigit())。
五、小结
本篇我们系统梳理了两大主题:
- • 六大运算符:算术、比较、赋值、逻辑、成员、身份——它们是 Python 表达式的基石。记住几个容易踩坑的地方:
/ 总是返回浮点数,// 是向下取整,is 用于判断身份而不是值。 - • 条件判断:
if / elif / else 让代码有了分支能力。掌握假值测试(空字符串、空列表、None 等都视为 False)和三元表达式,能让代码更简洁 Pythonic。
运算符 + 条件判断,已经足够写出有逻辑的小程序了。下一篇我们将进入循环(for / while) 的世界——重复的事情交给代码去做,这才是编程的核心乐趣。
本文首发于微信公众号「羽您码上聊」,欢迎关注获取更多技术内容。