第 9 课 · 逻辑运算

闰年判断器

学会 and / or / not 三个「逻辑词」,把好几个条件组合成一句完整的话,写出准确的闰年判断器。

120 分钟完整闭环 4 个知识点 5 段示范代码 难度 ★★
🏠 学期课件主页 ← 上一课:嵌套循环下一课:随机数 →
01

本课导览

先看这节课教什么、怎么分配 120 分钟,老师心里有底,课堂节奏就不乱。

第9课逻辑运算
🎯 趣味项目:闰年判断器
and 并且or 或者not 取反组合条件
🎯教学目标(学完这节课,学生能…)
  • 掌握 and(并且)、or(或者)、not(取反)三种逻辑运算符的含义与用法;
  • 能读懂并书写由多个比较条件组合成的复杂条件;
  • 理解闰年的判断规则:能被 4 整除但不能被 100 整除,或者能被 400 整除;
  • 能编写一个准确的闰年判断程序,并用来解决「某年 2 月有几天」的问题。
🔑 教学重点
  • and:两边都真才真;or:一边真就真;not:真假颠倒
  • 闰年规则写成一条公式:(year%4==0 and year%100!=0) or (year%400==0)
🧗 教学难点 / 易卡点
  • 分不清 and / or 什么时候用
  • 把 == 和 % 混在长条件里算错
  • 闰年规则记不牢(1900 不是闰年,2000 是闰年)
🧰课前准备(老师 / 学生)
  • 老师:准备日历/年份小卡片(2000、1900、2020、2023、2024),上课让学生先凭直觉判断哪些是闰年,再上机验证——制造认知冲突。
  • 学生:打开作品文件夹;今天作品保存为「第9课_闰年判断器.py」。
  • 口诀道具:把「and 两个都要、or 一个就够、not 反着来」做成 3 张彩色卡片贴在黑板边。
⏱️120 分钟教学流程(建议时间轴,可按班级情况微调)
时间环节做什么 / 师生互动要点
0–5候课 · 设备检查开机 → 打开编辑器 → 确认作品文件夹就位。
5–12上节回顾 · 快问快答嵌套循环外层管什么?内层呢?圣诞树谁打印出来了?总次数怎么算?
12–20情景导入玩「过关游戏」:要进游乐场既要买票又要够身高(and);去游泳可以周六或周日(or);「不是」今天(not)。
20–35知识讲解and → or → not 逐个讲,每个都配生活例子和 True/False 小实验。
35–50示范代码 + 上机(示例1~3)真值小实验 → 游乐场优惠(or)→ 天气与 not,边敲边猜结果。
50–72主项目:闰年判断器先用年份卡片让学生判断 → 讲规则 → 拆成 and / or 公式 → 带读代码 → 上机验证 2000/1900/2020/2023。
72–86课堂练习 A/B练习 1 验证四个年份;练习 2 判断数在 1~100 之间(and);投屏找茬。
86–98挑战练习 C三角形三边判断(三组 and 组合);学有余力的同学做「月份天数 v2」(2 月考虑闰年)。
98–106闯关小测and/or/not 各什么意思?闰年公式怎么写?优先级谁高?……
106–115总结 · 保存作品齐读口诀;保存「第9课_闰年判断器.py」;强调 and 比 or 优先。
115–120布置作业 · 预告布置必做/选做/思考;预告第 10 课:random 随机数——让电脑「掷骰子」,游戏真正随机起来!

时间轴把 2 小时切成 8 段:复习→导入→讲解→示范→上机→练习→检测→小结,每段都有明确产出。

02

情景导入 · 复习热身

先用 5 分钟把上节课的记忆叫醒,再用故事和类比把新知识挂到孩子已有的经验上。

🔁上节回顾 · 快问快答(建议 5 分钟)

问 1:嵌套循环的执行顺序一句话是什么?
→ 外层走一次,内层走完整的一轮。总次数 = 外层 × 内层。

问 2:打印图案时,外层和内层各管什么?
→ 外层管行数,内层管每行内容——行与列的分工。

问 3:猜数字游戏完整版靠什么做到「猜到对为止」?
→ while True + 猜对时 break——第 7 课的经典组合。

📖情景故事 · 今天学什么

小刚想去水上乐园玩,看到门口告示写着:身高达到 130 厘米,并且会游泳,才能玩深水滑梯。

小刚身高刚好 130,可他不会游泳——两个条件缺一个,管理员叔叔摇摇头:不行。小刚懂了:这就是「并且」,两个都要满足。

旁边的旋转木马写:1.2 米以下或 60 岁以上可以免费。小刚的奶奶刚好符合——只要占一条就行!这就是「或者」。

小刚又想起妈妈的话:不是今天值班才能去姥姥家——「不是」就是把条件反过来。

原来生活里到处是 and、or、not。今天用它们组合出电脑能懂的条件,挑战一个高难度问题:判断闰年!

💡生活类比:把新知识挂在旧经验上
🍔

and = 汉堡要两片面包

只有上片没有下片不成汉堡——两个条件都成立,结果才成立。

两个都要
🥤

or = 饮料二选一

可乐或雪碧,选一个就行——只要有一个条件成立,结果就成立。

一个就够
🙅

not = 反话

妈妈说的「不是」——把「真」变「假」,把「假」变「真」。

真假颠倒
📅

闰年 = 一条组合公式

能被 4 整除并且不能被 100 整除,或者能被 400 整除——and 和 or 合伙干活。

组合条件
🗝️本课核心口诀(板书 / 齐读)
核 心 口 诀and 两个都要,or 一个就够;
not 专说反话,括号组合走!
03

知识讲解

分小块讲透语法点,每一块都配生活类比 + 要点小结,讲完立刻口头小试。

🍔and——并且

条件 1 and 条件 2:两个条件都成立,整个结果才成立;只要有一个是假,结果就是假。

生活例子:「年龄 ≥6 并且 ≤12」才是小学生——太小不行,太大也不行,卡在中间才算。

记法:and 像汉堡的两片面包,缺一片都不完整。

小实验:print(True and True) → True;print(True and False) → False。只有「真 and 真」才得真。

两个都真 → 真一个假 → 假适合「必须同时满足」
💡 and 连接的两个条件,可以分别用小括号包起来,看得更清楚:if (a > 0) and (b > 0):
🥤or——或者

条件 1 or 条件 2:只要有一个条件成立,结果就成立;两个都假才是假。

生活例子:「年龄 ≤6 或 ≥65」——小孩或老人,占一头就能享受优惠。

记法:or 像「饮料二选一」,点可乐或雪碧,点到哪个都行。

小实验:print(True or False) → True;print(False or False) → False。or 比 and「大方」得多。

一个真 → 真全假才假适合「满足其一即可」
💡 判断边界时最容易用 or:超龄不行、太小不行——两头都挡在 or 里。
🙅not——取反,以及组合与优先级

not 条件:把结果反过来。成立变不成立,不成立变成立。

生活例子:if not 下雨: 就去踢球——没下雨才去,下雨就不去。

复杂条件可以多层组合:and 和 or 混在一起时,Python 规定 and 比 or 优先(先算 and),想改顺序就用小括号 (),和数学一样。

闰年公式就是组合的经典:(year%4==0 and year%100!=0) or (year%400==0)——小括号把「普通闰年」和「世纪闰年」两段隔开。

not 把真假颠倒and 先算,or 后算想改顺序 → 加小括号
💡 拿不准优先级就加括号,把想先算的包起来,代码既对又好读。
📅闰年的判断规则

闰年 = 2 月有 29 天的年份,每 4 年一次,但规则没那么简单:

普通闰年:能被 4 整除,但不能被 100 整除。例如 2020 年、2024 年。

世纪闰年:能被 400 整除。例如 2000 年是闰年,但 1900 年不是(它虽能被 100 整除,却不能被 400 整除)。

合起来:能被 4 整除 并且 不能被 100 整除,或者 能被 400 整除。写代码时注意取余 %:year % 4 == 0 表示能被 4 整除。

普通闰年:÷4 且不 ÷100世纪闰年:÷4001900 不是 / 2000 是
💡 记口诀:「四年一闰,百年不闰,四百年再闰。」正好对应公式的三段。
04

示范代码 · 动手做

老师先带读代码、讲注释,再让学生亲手敲一遍——敲错正好学习调试。

Python示例 1 · 小实验:打印 and / or / not 的真假
# 第9课:逻辑运算小实验
print(True and True)    # 两个都真 → 真
print(True and False)   # 一个假 → 假
print(False and False)  # 全假 → 假
print("----")
print(True or False)    # 一个真 → 真
print(False or False)   # 全假 → 假
print("----")
print(not True)         # 真变假
print(not False)        # 假变真
运 行 结 果
True
False
False
----
True
False
----
False
True
✍ 先在心里填答案,再运行对照,看 and / or / not 的规则是不是和你猜的一样。

🤔 想一想:(5 > 3) and (10 < 7) 结果是 True 还是 False?用刚学的规则口算。

Python示例 2 · 用 or 写「游乐场优惠」
# or 的应用:满足一个条件就优惠
age = int(input("请输入年龄:"))

if age <= 6 or age >= 65:
    print("免费入园!")
else:
    print("需要买票哦")
运 行 结 果
请输入年龄:70
免费入园!
✍ 分别输入 5、20、70 验证:5 岁太小免费、70 岁够老免费、20 岁要买票——两个条件用 or 连。

🤔 想一想:把 or 改成 and 再输入 5:会发生什么?5 岁既 ≤6 又 ≥65 吗?这就是 and 和 or 的区别。

Python示例 3 · 用 not 写「天气判断」
# not 的应用:不下雨就去踢球
rainy = True          # 先用变量记住:今天下雨(True=真)
if not rainy:         # 如果"不是"下雨……
    print("去踢球!")
else:
    print("在家拼乐高")
运 行 结 果
在家拼乐高
✍ 把 rainy = True 改成 rainy = False,再运行一次,看看 not 怎么把结果颠倒过来。

🤔 想一想:not rainy 在 rainy=True 时等于什么?rainy=False 时呢?

Python示例 4 · 主项目:闰年判断器
# 第9课主项目:闰年判断器
# 规则:能被4整除且不能被100整除,或能被400整除
year = int(input("请输入一个年份:"))

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(str(year) + " 年是闰年,2月有29天")
else:
    print(str(year) + " 年不是闰年,2月有28天")
运 行 结 果
请输入一个年份:2020
2020 年是闰年,2月有29天
✍ 依次输入 2000、1900、2020、2023 四个年份验证。注意 2000 是闰年而 1900 不是——这就是公式里「不能被 100 整除」的作用。

🤔 想一想:把公式的 or (year % 400 == 0) 删掉,再输入 2000:结果变了吗?为什么 2000 需要这条「后门」?

Python示例 5 · 挑战示例:给成绩判断加「输入范围检查」
# 组合挑战:分数不在0~100之间就报错
score = int(input("请输入分数(0-100):"))

if score < 0 or score > 100:
    print("输入错误!分数必须在0到100之间")
elif score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")
运 行 结 果
请输入分数(0-100):120
输入错误!分数必须在0到100之间
✍ 输入 120、95、70、50 各试一次。第一行 if 用 or 把「太低」和「太高」两个错误挡在外面。

🤔 想一想:为什么「输入错误」的判断要放在最前面?如果把 elif score >= 90 放最前面,输入 120 会怎样?

05

易错提醒

把最容易翻车的写法先亮出来,见一次、错一次、就会了。

易错点 1

and / or 用混

✗ 错误写法
if age <= 6 and age >= 65:
    print("免费")
✓ 正确写法
if age <= 6 or age >= 65:
    print("免费")
为什么:「6 岁以下或 65 岁以上」是满足其一就免费,该用 or。and 要求同时满足——没有人能既 ≤6 又 ≥65。想清楚语义再选词。
易错点 2

闰年条件少写了「不能被100整除」

✗ 错误写法
if year % 4 == 0 or year % 400 == 0:
✓ 正确写法
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
为什么:光能被 4 整除不够:1900 能被 4 整除但它是平年!必须排除「能被 100 整除但不能被 400 整除」的年份。
易错点 3

混淆 == 与 % 的整除写法

✗ 错误写法
if year / 4 == 0:
✓ 正确写法
if year % 4 == 0:
为什么:判断「能不能整除」用取余 %:余数为 0(year % 4 == 0)才表示能整除。year / 4 是除法,得到商而不是余数。
06

课堂练习(分层)

基础题人人过关,进阶题鼓励尝试,挑战题给学有余力的孩子。参考答案给老师做巡视对照。

A组 · 基础(人人必做)课堂完成,老师巡回指导
  1. 运行闰年判断器,输入 2000、2020、1900、2023 四个年份验证,把结果抄在练习本上。 (提示:1900 是平年、2000 是闰年,最容易记反。)
  2. 口算并上机验证:(5 > 3) and (10 < 7) 和 (5 > 3) or (10 < 7) 各等于什么。 (提示:and 严、or 松。)
B组 · 进阶(鼓励尝试)课堂完成,老师巡回指导
  1. 写「范围判断器」:输入一个数,用 and 判断它是否在 1 到 100 之间(含 1 和 100),输出在/不在。 (提示:num >= 1 and num <= 100。)
  2. 写「2月天数 v2」:输入年份和月份,输出该月天数——2 月要考虑闰年。 (提示:先用闰年公式算 2 月是 28 还是 29,其余月份照旧。) 参考答案:可复用第 5 课月份天数的思路,只改 2 月。
C组 · 挑战(学有余力)课堂完成,老师巡回指导
  1. 输入三条边长,判断能否组成三角形:任意两边之和大于第三边。 (提示:a+b>c and a+c>b and b+c>a 三个条件用 and 连。)
  2. 写「过山车检查员」:身高 ≥120 且年龄 ≤60 才能玩,两个条件分别输入,用 and 组合判断。 (提示:先 int() 输入两个数,再写一个 if。)
07

闯关小测

收尾前 10 分钟,用口答 / 举手抢答把今天的关键点过一遍。

闯关 1先举手回答,再对答案

and 什么时候结果为真?

答案:两个条件都为真时。

💡 and 严:一个假就全假。

闯关 2先举手回答,再对答案

or 什么时候结果为假?

答案:两个条件都为假时。

💡 or 松:一个真就全真。

闯关 3先举手回答,再对答案

not True 等于什么?not False 呢?

答案:False;True。

💡 not 把真假颠倒。

闯关 4先举手回答,再对答案

闰年判断公式是什么?

答案:(year%4==0 and year%100!=0) or (year%400==0)。

💡 四年一闰,百年不闰,四百年再闰。

闯关 5先举手回答,再对答案

1900 年是闰年吗?2000 年呢?

答案:1900 不是(能被100整除但不能被400整除);2000 是。

💡 世纪年必须能被 400 整除才算闰年。

08

小结 · 作业与预告

用一句话带走今天的内容;作业分层布置,作品记得保存进成长档案。

🖍️本课小结(一句话 + 板书核心词)
一句话带走学会 and / or / not 三个「逻辑词」,把好几个条件组合成一句完整的话,写出准确的闰年判断器。
and 两个都要or 一个就够not 反着来闰年:(÷4 且不÷100) 或 ÷400% 判断整除1900平 / 2000闰and 先于 or
必做 · 人人过关
  1. 必做题:写「季节判断器」——输入月份(1-12),输出季节:3-5 春、6-8 夏、9-11 秋、12-2 冬。
  2. 把闰年判断器保存为「第9课_闰年判断器.py」放进作品文件夹(老师检查)。
选做 · 鼓励挑战
  1. 选做题:输入年份和月份,输出这个月有多少天——2 月要按闰年规则判断。
  2. 选做题:写「社团报名检查」——输入年龄和是否交费(y/n),年龄在 7~12 且已交费才报名成功(用 and 和 == 组合)。
思考 · 烧脑一下
  1. 思考题:and 和 or 谁优先?上机验证 print(True or False and False) 的结果,再想想到底先算谁。
  2. 想一想:not 能用在闰年公式里吗?试着把「不能被 100 整除」改写成 not (year % 100 == 0) 的写法。
👉 下节课预告:下一课《随机数》:import 导入模块、random.randint 掷骰子、random.choice 抽签——让石头剪刀布的电脑真正随机出拳!