CC++ & Algorithm

逻辑运算符——组合多个条件的“开关”

简单9
语言版本:C++Python
概述:用 and、or、not 把多个条件串起来,就像生活中“同时满足”或“满足一个就行”的判断。

逻辑运算符:用 and、or、not 组合多个条件

生活中,我们经常需要同时判断好几个条件才能做决定。比如“写完作业 并且 整理好书包才能看电视”——这里有两个条件,必须都满足。Python 里的 逻辑运算符 就是用来把多个条件串起来的“开关”,它们能帮程序做出更复杂的判断。

逻辑运算符有三种:and(并且)、or(或者)、not(非)。它们操作的是 布尔值(True 或 False),结果也是一个布尔值。就像把几盏小灯串起来,只有按对了开关,大灯才会亮。


? and(与)——两个条件都必须为真

定义:当 条件A and 条件B 时,只有 A 和 B 同时为 True,结果才是 True;只要有一个是 False,结果就是 False。

条件A条件BA and B
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

生活例子:老师说“期末考试 数学考到 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条件BA or B
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

生活例子:“今天去公园要么坐秋千 或者 玩滑梯,选一个就行。”只要有一样能玩,你就开心。

# 今天可以玩的项目
can_swing = False  # 秋千坏了
can_slide = True   # 滑梯能玩
have_fun = can_swing or can_slide  # 有一个能玩就行
print("今天玩得开心吗?", have_fun)  # True

❌ not(非)——把条件反过来

定义not 条件 会把 True 变成 False,把 False 变成 True。就像说“不”、“没”、“非”。

条件not 条件
TrueFalse
FalseTrue

生活例子:妈妈说:“睡觉就不能看电视。”所以 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

⚠️ 新手常见错误

  1. 把 and 写成 &
    在 Python 里,and 是逻辑运算符,& 是位运算符(二进制运算),对于 True/False 偶尔也能用,但结果可能有奇怪的行为。一定要用 andornot 这几个单词。

  2. 忘记写括号导致顺序混乱
    比如想表达“年龄大于12且小于18”,如果写成 age > 12 and age < 18 没问题,但如果有 or 混在一起,最好加括号明确顺序。例如:(age > 12) and (age < 18)

  3. 把 True 和 False 拼错
    Python 严格区分大小写,truefalse 都会报错。必须写成 TrueFalse

  4. 用 and 时两个条件写反
    比如“年龄不小于6岁且不大于12岁”,新手可能写成 age >= 6 and age <= 12。如果写成 age <= 6 and age >= 12,那永远不会有 True,因为一个数不可能同时小于6和大于12。

  5. 混淆 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:
  • 布尔类型TrueFalse 是两个基本值,它们的运算规则是逻辑运算符的基础。
  • 运算符优先级not 优先级最高,然后 and,最后 or。建议用括号明确顺序。

你现在已经学会了用 and、or、not 把简单条件组合成复杂判断。下次写程序时,试试用它们来“定规则”吧!

例题精讲

1单选题

在Python中,表达式 (3 > 5) or (2 < 4) 的结果是什么?

ATrue
BFalse
C3
D报错
2单选题

下列哪个条件表达式可以正确判断变量 score 是否在 60 到 100 之间(包含 60 和 100),并且使用了逻辑运算符?

Ascore >= 60 or score <= 100
Bscore >= 60 and score <= 100
Cscore >= 60 or score < 100
Dscore >= 60 and score < 100
3判断题

在Python中,not (10 > 5) 的结果是 False。

4判断题

在Python中,逻辑运算符 and、or、not 的优先级从高到低依次为 not > and > or。

5填空题
请补全代码,实现判断一个数 x 是否在 0 到 100 之外(即小于 0 或大于 100),如果是则输出“超出范围”。
代码:
x = -5
if x < 0 ___ x > 100:
    print("超出范围")