逻辑运算符——组合多个条件的“开关”
简单9逻辑运算符:用 and、or、not 组合多个条件
生活中,我们经常需要同时判断好几个条件才能做决定。比如“写完作业 并且 整理好书包才能看电视”——这里有两个条件,必须都满足。Python 里的 逻辑运算符 就是用来把多个条件串起来的“开关”,它们能帮程序做出更复杂的判断。
逻辑运算符有三种:and(并且)、or(或者)、not(非)。它们操作的是 布尔值(True 或 False),结果也是一个布尔值。就像把几盏小灯串起来,只有按对了开关,大灯才会亮。
? and(与)——两个条件都必须为真
定义:当 条件A and 条件B 时,只有 A 和 B 同时为 True,结果才是 True;只要有一个是 False,结果就是 False。
| 条件A | 条件B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
生活例子:老师说“期末考试 数学考到 90 分以上 and 语文考到 85 分以上 才能获得‘学习之星’奖状”。这两项得同时达标才行。
# 小明两门课的成绩
math_score = 92 # 数学成绩
chinese_score = 80 # 语文成绩
get_award = (math_score > 90) and (chinese_score > 85) # 两个条件都得满足
print("小明得到学习之星吗?", get_award) # False,因为语文没到85分
? or(或)——至少一个条件为真
定义:当 条件A or 条件B 时,只要 A 或 B 中有一个为 True,结果就是 True;只有两个都是 False 时结果才为 False。
| 条件A | 条件B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
生活例子:“今天去公园要么坐秋千 或者 玩滑梯,选一个就行。”只要有一样能玩,你就开心。
# 今天可以玩的项目
can_swing = False # 秋千坏了
can_slide = True # 滑梯能玩
have_fun = can_swing or can_slide # 有一个能玩就行
print("今天玩得开心吗?", have_fun) # True
❌ not(非)——把条件反过来
定义:not 条件 会把 True 变成 False,把 False 变成 True。就像说“不”、“没”、“非”。
| 条件 | not 条件 |
|---|---|
| True | False |
| False | True |
生活例子:妈妈说:“不睡觉就不能看电视。”所以 not sleeping 就是“还没睡觉”,如果还没睡觉,那么不能看电视就是 True(真不能看)。
# 睡前检查
is_sleeping = False # 正在睡觉吗?没有,所以 False
can_watch_tv = not is_sleeping # 没睡觉才能看?反过来:False -> True? 不,妈妈说的“不睡觉不能看”,所以这里的逻辑是:如果没睡觉,不能看;如果睡觉了,才能看?其实妈妈原话是“不睡觉就不能看电视”,所以条件是:not sleeping → can't watch。但这里我们演示 not 取反:not False = True,表示“不睡觉”(即还没睡)是 True。
# 上面的例子有点绕,我们换个直接点的:
rainy = True # 今天下雨
not_rainy = not rainy # 今天不下雨?
print("今天不下雨吗?", not_rainy) # False,因为下雨了,所以不下雨是假的
更清楚点的例子:
# 判断是否该带伞
is_raining = False # 没下雨
need_umbrella = not is_raining # 没下雨就不用带伞?不对,这里 not 取反:not False = True, 意思是“没下雨”这个条件为真。但我们需要的是:如果下雨则带伞。其实可以写 if is_raining: need_umbrella = True。但是 not 通常用来排除某个情况。
# 更常见的用法:检查是否成年
age = 17
is_adult = age >= 18 # False
is_not_adult = not is_adult # True,没成年
print("未成年人?", is_not_adult) # True
? 组合多个条件——像搭积木
你可以把 and、or、not 放在一起用,就像用积木拼出更复杂的规则。注意用括号来决定先算哪一块,就像数学里的先乘除后加减。
# 游乐场的规定:身高超过1.4米 **或者** 有大人陪同,并且不是孕妇,才能玩过山车
height = 1.5 # 身高,单位米
accompanied = True # 有大人陪同吗?
is_pregnant = False # 是孕妇吗?
can_ride = (height > 1.4 or accompanied) and not is_pregnant
print("能玩过山车吗?", can_ride) # True
⚠️ 新手常见错误
-
把 and 写成 &
在 Python 里,and是逻辑运算符,&是位运算符(二进制运算),对于 True/False 偶尔也能用,但结果可能有奇怪的行为。一定要用and、or、not这几个单词。 -
忘记写括号导致顺序混乱
比如想表达“年龄大于12且小于18”,如果写成age > 12 and age < 18没问题,但如果有 or 混在一起,最好加括号明确顺序。例如:(age > 12) and (age < 18)。 -
把 True 和 False 拼错
Python 严格区分大小写,true或false都会报错。必须写成True、False。 -
用 and 时两个条件写反
比如“年龄不小于6岁且不大于12岁”,新手可能写成age >= 6 and age <= 12。如果写成age <= 6 and age >= 12,那永远不会有 True,因为一个数不可能同时小于6和大于12。 -
混淆 not 的位置
not a and b相当于(not a) and b,而不是not (a and b)。如果想对整个表达式取反,要用括号:not (a and b)。
? 完整可运行示例
下面的是一个判断“能否去游乐园”的完整程序,结合了比较运算符和逻辑运算符。
# 判断小明能否去游乐园
age = 8 # 年龄
height = 1.2 # 身高,单位米
has_ticket = True # 有票吗?
is_weekday = False # 今天是工作日吗?
# 规则:必须有票,并且(身高≥1.2米 或者 年龄≥6岁),而且不是工作日(因为工作日只对6岁以下开放,这里简化)
can_go = has_ticket and (height >= 1.2 or age >= 6) and not is_weekday
print("小明能去游乐园吗?", can_go) # True
# 再试一个条件:如果没票,肯定不能去
has_ticket = False
can_go = has_ticket and (height >= 1.2 or age >= 6) and not is_weekday
print("没票还能去吗?", can_go) # False
运行结果:
小明能去游乐园吗? True
没票还能去吗? False
? 相关知识点指引
- 比较运算符(
>,<,>=,<=,==,!=):它们产生布尔值,是逻辑运算符的“输入”。需要先学会比大小。 - if 语句:逻辑运算符最常和
if配合使用,用来控制程序的分支。比如:if age >= 18 and has_id: - 布尔类型:
True和False是两个基本值,它们的运算规则是逻辑运算符的基础。 - 运算符优先级:
not优先级最高,然后and,最后or。建议用括号明确顺序。
你现在已经学会了用 and、or、not 把简单条件组合成复杂判断。下次写程序时,试试用它们来“定规则”吧!
例题精讲
在Python中,表达式 (3 > 5) or (2 < 4) 的结果是什么?
下列哪个条件表达式可以正确判断变量 score 是否在 60 到 100 之间(包含 60 和 100),并且使用了逻辑运算符?
在Python中,not (10 > 5) 的结果是 False。
在Python中,逻辑运算符 and、or、not 的优先级从高到低依次为 not > and > or。
请补全代码,实现判断一个数 x 是否在 0 到 100 之外(即小于 0 或大于 100),如果是则输出“超出范围”。
代码:
x = -5
if x < 0 ___ x > 100:
print("超出范围")