2. 比较运算符
二、比较运算符
比较运算符用于比较两个值,比较结果是布尔值 True 或 False。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | True |
!= | 不等于 | 5 != 3 | True |
> | 大于 | 5 > 3 | True |
< | 小于 | 5 < 3 | False |
>= | 大于或等于 | 5 >= 5 | True |
<= | 小于或等于 | 3 <= 5 | True |
1. == 和 = 有什么区别?
这是初学者最容易混淆的地方。
age = 18 # 赋值:把 18 赋给 age
print(age == 18) # 比较:age 是否等于 18
=是赋值运算符。==是比较运算符。
错误示例:
if age = 18:
print("成年")
这不是合法的 Python 条件表达式,会产生语法错误。
2. 比较运算符的应用
例如,判断一个人是否成年:
age = 20
if age >= 18:
print("已成年")
else:
print("未成年")
判断成绩是否及格:
score = 59
if score >= 60:
print("及格")
else:
print("不及格")
3. Python 支持连续比较
Python 有一个很实用的特点:可以像数学表达式一样连续比较。
score = 85
print(60 <= score <= 100) # True
它相当于:
60 <= score and score <= 100
因此,判断成绩是否在 60~100 之间,可以写成:
if 60 <= score <= 100: print("成绩有效")
这种写法比其他一些编程语言更简洁。
八、条件表达式:用一行代码完成简单判断
严格来说,条件表达式不是独立的运算符类别,但它是 Python 中非常常用的表达式写法。
基本形式:
结果1 if 条件 else 结果2
含义是:如果条件成立,就取前面的结果;否则取 else 后面的结果。
例如,判断奇偶数:
num = 7result = "偶数" if num % 2 == 0 else "奇数"print(result) # 奇数
等价于:
num = 7if num % 2 == 0: result = "偶数"else: result = "奇数"print(result)
再例如,求两个数中的较大值:
a = 10b = 20maximum = a if a > b else bprint(maximum) # 20
什么时候使用?
适合只有两个结果、判断逻辑简单的场景。如果分支很多,仍然建议使用正常的 if、elif、else,更容易阅读。
九、运算符优先级:多个运算符一起出现时怎么办?
这是初学者从单个运算符走向综合编程时,必须掌握的知识。
例如:
print(2 + 3 * 4) # 14
为什么不是 20?
因为乘法的优先级高于加法,先算 3 * 4,再算 2 + 12。
1. 常见运算符优先级(从高到低)
| 优先级 | 运算符或表达式 | 示例 | |---|---|---| | 高 | () | (2 + 3) * 4 | | 高 | ** | 2 ** 3 | | 较高 | +x、-x、~x | -5、~5 | | 较高 | *、/、//、% | 10 // 3 | | 中 | +、- | 5 + 3 | | 中 | <<、>> | 5 << 1 | | 中 | &、^、| | 5 & 3 | | 较低 | <、<=、>、>=、==、!=、in、is | 5 > 3 | | 较低 | not | not True | | 较低 | and | True and False | | 较低 | or | True or False | | 低 | if ... else ... | 条件表达式 | | 低 | =、+= 等赋值 | x += 1 |
这张表列出的是常见运算符的主要层级,并非 Python 完整优先级表。特别要注意,幂运算 ** 与左侧的一元负号组合时存在特殊规则。
2. 算术运算的优先级
print(10 + 6 / 2) # 13.0print((10 + 6) / 2) # 8.0print(2 ** 3 * 2) # 16print(2 ** (3 * 2)) # 64
括号可以改变计算顺序。
3. 比较运算与逻辑运算的优先级
age = 20score = 85print(age >= 18 and score >= 60) # True
Python 会先计算比较表达式,再计算 and。
但是,实际写代码时,我建议你养成一个习惯:当条件比较复杂时,主动使用括号,让代码更容易读懂。
if (age >= 18) and (score >= 60): print("符合条件")
这不一定是语法上的必要要求,但对初学者特别有帮助。
4. 一个容易出错的例子
print(not 5 > 3) # False
这里先比较 5 > 3,得到 True,再进行 not 取反,得到 False。
等价于:
print(not (5 > 3))
十、容易混淆的运算符对比
这部分特别适合用来给初学者查漏补缺。
| 容易混淆的符号 | 区别 | 示例 |
|---|---|---|
= 和 == | 赋值 vs 比较相等 | x = 5、x == 5 |
/ 和 // | 普通除法 vs 向下取整除法 | 7 / 2 得到 3.5,7 // 2 得到 3 |
% 和 / | 求余数 vs 求商 | 7 % 2 得到 1 |
** 和 ^ | 乘方 vs 按位异或 | 2 ** 3 得到 8 |
and 和 & | 逻辑与 vs 按位与 | True and False、5 & 3 |
or 和 | | 逻辑或 vs 按位或 | True or False、5 | 3 |
== 和 is | 内容相等 vs 对象身份相同 | [1] == [1] 为 True,两个独立列表之间的 is 为 False |
not 和 != | 逻辑取反 vs 判断不等 | not (x > 3)、x != 3 |
十一、综合示例:用多种运算符解决实际问题
题目:输入一个学生的成绩,判断成绩是否合法、是否及格,并判断成绩是否为偶数。
score = int(input("请输入学生成绩:"))if score < 0 or score > 100: print("成绩无效")else: if score >= 60: print("及格") else: print("不及格") if score % 2 == 0: print("成绩是偶数") else: print("成绩是奇数")
这个程序综合使用了:
=:给变量赋值。int():将输入转换为整数。<、>、>=:比较运算符。or:逻辑运算符。%:取余运算符。if、else:分支语句。
它也体现了一个很重要的编程思路:先判断输入是否合法,再处理正常情况。
十二、初学者应该优先掌握哪些运算符?
第一优先级:必须熟练
+、-、*、/、//、%、**、==、!=、>、<、>=、<=、=、+=、and、or、not
用于算术计算、变量更新和分支语句,是入门编程的核心。
第二优先级:认识并会使用
in、not in、is、is not、条件表达式
随着字符串、列表、字典和对象知识的学习逐步掌握。
第三优先级:后续深入
&、|、^、~、<<、>>
主要用于二进制处理、底层开发及特定算法。
最后,给初学者一个最实用的建议:学习运算符时,不要只背符号的含义。每学一个运算符,都尝试用它解决一个实际问题。例如,用 % 判断奇偶数,用 // 拆分时间,用 and 组合成绩条件,用 += 更新游戏角色的分数。
能够把运算符组合起来解决问题,才算真正学会了运算符。
分支语句 + 算术运算符练习题
这 10 道题面向 Python 初学者,适合学完 if、elif、else 和算术运算符后的进阶练习。
设计思路是:不靠复杂语法增加难度,而是通过实际问题,让学生学会组合条件判断、计算、取余、整除和运算优先级。
第一部分:10 道练习题
第 1 题:超市购物优惠计算
基础进阶
顾客购买商品,输入商品总价 price,按照以下规则计算最终付款金额:
- 总价满 200 元,打 8 折。
- 总价满 100 元但不足 200 元,打 9 折。
- 总价不足 100 元,不打折。
- 如果最终金额满 150 元,再减免 10 元。
要求: 输出原价、折扣后金额和最终付款金额。注意,满 150 元的判断针对折扣后的金额。
第 2 题:判断一个三位数的特殊性质
数字处理
输入一个三位正整数 num,分别计算它的百位、十位和个位数字。
- 如果三个数字都相同,输出“相同数字”。
- 如果三个数字之和能被 3 整除,输出“数字之和能被 3 整除”。
- 如果以上条件都不满足,输出“普通数字”。
要求: 必须使用 // 和 % 提取数字,不能把整数转换成字符串处理。
第 3 题:学生成绩等级与补考判断
多条件判断
输入学生成绩 score(0~100 的整数),根据规则输出结果:
- 90~100 分:优秀。
- 80~89 分:良好。
- 60~79 分:及格。
- 0~59 分:不及格。
- 如果成绩不在 0~100 范围内,输出“成绩无效”。
进阶要求: 不及格学生中,成绩达到 50 分的提示“补考有机会”,低于 50 分的提示“需要重点补习”。
要求: 不要让无效成绩进入正常的等级判断。
第 4 题:停车场收费系统
分段计费
输入停车时长 hours,单位为小时,可以是小数。收费规则如下:
- 不超过 1 小时,收费 5 元。
- 超过 1 小时、不超过 3 小时,收费 10 元。
- 超过 3 小时、不超过 8 小时,收费 20 元。
- 超过 8 小时,收费 30 元。
如果停车时长大于 24 小时,额外输出“长时间停车,请确认停车记录”。
要求: 停车时长必须大于 0,否则提示输入无效。
第 5 题:判断平年与闰年
逻辑综合
输入一个年份 year,判断它是平年还是闰年。
闰年规则:
- 能被 400 整除,是闰年。
- 能被 4 整除但不能被 100 整除,也是闰年。
- 其他情况都是平年。
要求: 使用 % 判断整除关系,并处理年份必须大于 0 的情况。
挑战: 解释为什么 2000 年是闰年,而 1900 年不是。
第 6 题:工资计算器
综合计算
输入员工的正常工作小时数 hours 和每小时工资 rate。
- 每天正常工作 8 小时以内,按正常工资计算。
- 超过 8 小时的部分,按 1.5 倍工资计算。
- 如果总工资超过 500 元,额外奖励 50 元。
要求: 输出正常工资、加班工资、奖励金额和最终工资。
注意: 工作小时数不能为负数,每小时工资必须大于 0。
第 7 题:游戏角色战斗结算
游戏逻辑
玩家攻击怪物,输入攻击力 attack、怪物防御力 defense 和怪物当前血量 hp。
伤害计算规则:
- 当攻击力大于防御力时,伤害为攻击力减去防御力。
- 当攻击力不大于防御力时,至少造成 1 点伤害。
- 如果攻击力是 10 的倍数,触发暴击,伤害翻倍。
- 怪物剩余血量不能低于 0。
要求: 输出最终伤害、剩余血量,并判断怪物是否被击败。
注意: 暴击判断应使用原始攻击力,而不是计算后的伤害。
第 8 题:手机话费套餐计算
分段计算
输入本月通话分钟数 minutes,套餐规则如下:
- 套餐包含 100 分钟,月费 30 元。
- 超出 100 分钟的部分,每分钟 0.2 元。
- 如果通话时间超过 300 分钟,超出 300 分钟的部分改为每分钟 0.1 元。
要求: 输出本月总费用,并判断费用是否超过 60 元。
注意: 100 分钟以内的通话不额外收费;超过 300 分钟时,前 200 分钟超出套餐的部分仍按 0.2 元计算。
第 9 题:秒数转换与时间判断
整除与取余
输入一个非负整数 seconds,将其转换为小时、分钟和秒。
例如:输入 3675,输出 1 小时 1 分钟 15 秒。
进阶要求:
- 如果转换后的小时数达到 24,输出“已经达到或超过一天”。
- 如果总秒数不足 60,输出“不到一分钟”。
- 如果总秒数是 60 的倍数,输出“整分钟”。
要求: 使用 // 和 % 进行转换,不能使用日期时间库。
第 10 题:运动会积分排名
综合挑战
某班级参加三项比赛,输入三项得分 a、b、c,每项得分为 0~100 分。
计算总分,并根据以下规则评定:
- 总分达到 270 分:金牌等级。
- 总分达到 240 分但不足 270 分:银牌等级。
- 总分达到 180 分但不足 240 分:铜牌等级。
- 总分不足 180 分:继续努力。
进阶要求:
- 如果三项得分完全相同,额外输出“三项成绩一致”。
- 如果总分是 3 的倍数,额外输出“总分是 3 的倍数”。
- 任何一项成绩超出范围,都提示“成绩输入无效”,不进行等级评定。
第二部分:练习要求
建议学生完成每道题时遵循以下要求:
- 必须使用
if、elif、else完成需要的分支判断。 - 至少使用一种算术运算符,例如
+、-、*、/、//、%。 - 合理使用比较运算符和逻辑运算符组合条件。
- 考虑边界值、非法输入,以及多个条件同时成立的情况。
- 除题目要求外,不使用循环、列表、函数、异常处理等尚未学习的知识。
第三部分:教师参考的难度梯度
| 难度 | 题目 | 重点训练 |
|---|---|---|
| 入门进阶 | 1、3 | 分支结构、条件范围 |
| 中等 | 2、4、5 | 取余、整除、逻辑组合 |
| 中等偏上 | 6、8、9 | 分段计算、运算顺序 |
| 综合挑战 | 7、10 | 多条件组合、结果修正 |
教学建议: 这组题最值得训练的不是写出多少个 if,而是让学生先理清计算步骤,再决定判断顺序。尤其是第 1、6、7、8 题,适合要求学生先写出计算流程,再动手编码。
如果用于课堂作业,可以先让学生独立完成这 10 道题,再统一讲解参考代码和典型错误。
下面是第一组《Python 分支语句 + 算术运算符》10 道进阶练习题的参考答案。代码尽量使用初学者已经学过的 input()、int()、float()、if/elif/else 和算术运算符,不使用循环、列表、函数等进阶语法。
第1题:超市购物优惠
题目要求: 满 200 元打八折,满 100 元打九折,不足 100 元不打折;折后金额满 150 元再减 10 元。
amount = float(input("请输入购物金额:"))
if amount < 0:
print("购物金额不能为负数")
else:
if amount >= 200:
total = amount * 0.8
elif amount >= 100:
total = amount * 0.9
else:
total = amount
if total >= 150:
total = total - 10
print("实际支付:", round(total, 2), "元")
关键知识点:
if/elif/else进行分段判断。- 两次
if分别处理打折和额外减免。 round(total, 2)保留两位小数。
第2题:三位数数字特殊性质
题目要求: 输入一个三位正整数,分别提取百位、十位和个位,判断是否满足指定条件。
num = int(input("请输入一个三位正整数:"))
if num < 100 or num > 999:
print("输入错误,请输入三位正整数")
else:
hundreds = num // 100
tens = num // 10 % 10
ones = num % 10
print("百位:", hundreds)
print("十位:", tens)
print("个位:", ones)
if hundreds == tens and tens == ones:
print("三个数字都相同")
else:
print("三个数字不完全相同")
关键知识点:
//:整数除法,取商的整数部分。%:取余数。num // 10 % 10:提取十位数字。
第3题:成绩等级与补考
题目要求: 根据成绩判断等级,并对不及格的学生提示补考。
score = float(input("请输入考试成绩:"))
if score < 0 or score > 100:
print("成绩输入错误")
elif score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 70:
print("中等")
elif score >= 60:
print("及格")
else:
print("不及格,需要补考")
关键知识点: elif 按顺序判断条件。因为前面的条件已经排除了更高的分数,所以后面只需要判断下限。
第4题:停车场分段收费
题目要求: 停车不超过 1 小时收费 5 元;超过 1 小时但不超过 3 小时收费 10 元;超过 3 小时,每增加 1 小时加收 3 元。
这里约定:超过整小时的部分按 1 小时计算。
hours = float(input("请输入停车小时数:"))
if hours < 0:
print("停车时间不能为负数")
elif hours == 0:
print("停车费:0元")
elif hours <= 1:
print("停车费:5元")
elif hours <= 3:
print("停车费:10元")
else:
extra_hours = int(hours - 3)
if hours - 3 > extra_hours:
extra_hours = extra_hours + 1
fee = 10 + extra_hours * 3
print("停车费:", fee, "元")
关键知识点:
- 分段收费。
- 使用
int()取整数部分,再通过比较判断是否需要多算一个小时。 - 这里没有使用
math.ceil(),避免引入额外知识。
第5题:闰年判断
题目要求: 判断输入的年份是否为闰年。
year = int(input("请输入年份:"))
if year <= 0:
print("年份必须大于0")
elif year % 400 == 0:
print(year, "是闰年")
elif year % 100 == 0:
print(year, "不是闰年")
elif year % 4 == 0:
print(year, "是闰年")
else:
print(year, "不是闰年")
关键知识点: 闰年的判断规则是:能被 400 整除,或者能被 4 整除但不能被 100 整除。
第6题:工资与加班工资计算
题目要求: 正常工作时间每小时 20 元,超过 8 小时的部分按 1.5 倍计算。
hours = float(input("请输入工作小时数:"))
if hours < 0:
print("工作小时数不能为负数")
elif hours <= 8:
salary = hours * 20
print("工资:", round(salary, 2), "元")
else:
salary = 8 * 20 + (hours - 8) * 20 * 1.5
print("工资:", round(salary, 2), "元")
关键知识点: 加班工资需要分成两部分计算:正常工时工资和加班工时工资。
第7题:游戏角色战斗伤害计算
题目要求: 实际伤害等于攻击力减去防御力,但至少造成 1 点伤害。
attack = int(input("请输入攻击力:"))
defense = int(input("请输入防御力:"))
if attack < 0 or defense < 0:
print("攻击力和防御力不能为负数")
else:
damage = attack - defense
if damage < 1:
damage = 1
print("实际伤害:", damage)
关键知识点: 先进行算术运算,再通过分支语句修正结果。
第8题:手机话费套餐
题目要求: 根据通话分钟数计算话费。这里约定:基础月租 20 元,100 分钟以内不额外收费,超过 100 分钟的部分每分钟 0.2 元。
minutes = float(input("请输入通话分钟数:"))
if minutes < 0:
print("通话分钟数不能为负数")
elif minutes <= 100:
fee = 20
print("本月话费:", fee, "元")
else:
fee = 20 + (minutes - 100) * 0.2
print("本月话费:", round(fee, 2), "元")
关键知识点: 将固定费用与超出部分的费用相加。
第9题:秒数转换时分秒
题目要求: 输入一个总秒数,将它转换成小时、分钟和秒。
total_seconds = int(input("请输入总秒数:"))
if total_seconds < 0:
print("秒数不能为负数")
else:
hours = total_seconds // 3600
minutes = total_seconds % 3600 // 60
seconds = total_seconds % 60
print(hours, "小时", minutes, "分钟", seconds, "秒")
关键知识点:
- 小时数:总秒数除以 3600 取整。
- 分钟数:先去掉整小时,再除以 60 取整。
- 剩余秒数:总秒数对 60 取余。
第10题:三项成绩积分等级
题目要求: 输入三门课程成绩,计算总分和平均分,并根据平均分评定等级。
score1 = float(input("请输入第一门成绩:"))
score2 = float(input("请输入第二门成绩:"))
score3 = float(input("请输入第三门成绩:"))
if (score1 < 0 or score1 > 100 or
score2 < 0 or score2 > 100 or
score3 < 0 or score3 > 100):
print("成绩必须在0到100之间")
else:
total = score1 + score2 + score3
average = total / 3
print("总分:", total)
print("平均分:", round(average, 2))
if average >= 90:
print("等级:优秀")
elif average >= 80:
print("等级:良好")
elif average >= 60:
print("等级:及格")
else:
print("等级:不及格")
关键知识点:
- 使用
+计算总分。 - 使用
/计算平均分。 - 使用比较运算符和分支语句划分等级。
教学建议
这 10 道题可以重点训练学生的三种能力:
| 能力 | 代表题目 |
|---|---|
| 分段判断与边界处理 | 第1、3、4、5题 |
| 算术运算与数据拆分 | 第2、6、7、8题 |
| 综合计算与结果转换 | 第9、10题 |
注意: 第4题采用了“超过整小时按一小时计算”的规则;如果你的原题要求不同,收费算法也需要相应调整。第8题的手机套餐规则是为了给出完整参考答案而补充的示例规则。