第7集 比较运算符
1. 比较运算符概述
比较运算符用于比较两个值,返回布尔值(True或False)。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
== |
等于 | a == b |
判断a和b是否相等 |
!= |
不等于 | a != b |
判断a和b是否不相等 |
> |
大于 | a > b |
判断a是否大于b |
< |
小于 | a < b |
判断a是否小于b |
>= |
大于等于 | a >= b |
判断a是否大于或等于b |
<= |
小于等于 | a <= b |
判断a是否小于或等于b |
2. 等于和不等于
2.1 等于运算符(==)
# 数字比较
print(5 == 5) # 输出:True
print(5 == 3) # 输出:False
print(5 == 5.0) # 输出:True(整数和浮点数值相等)
# 字符串比较
print("hello" == "hello") # 输出:True
print("hello" == "Hello") # 输出:False(大小写敏感)
print("Python" == "Python") # 输出:True
# 变量比较
a = 10
b = 10
print(a == b) # 输出:True
print(a == 5) # 输出:False2.2 不等于运算符(!=)
# 数字比较
print(5 != 5) # 输出:False
print(5 != 3) # 输出:True
# 字符串比较
print("hello" != "world") # 输出:True
print("hello" != "hello") # 输出:False
# 变量比较
a = 10
b = 20
print(a != b) # 输出:True
print(a != 10) # 输出:False2.3 注意:赋值与比较的区别
# 错误示例:使用=进行比较
if a = 10: # 错误:这是赋值,不是比较
pass
# 正确示例:使用==进行比较
if a == 10: # 正确:这是比较
pass3. 大于和小于
3.1 大于运算符(>)
# 数字比较
print(10 > 5) # 输出:True
print(5 > 10) # 输出:False
print(10 > 10) # 输出:False(不包含等于)
# 浮点数比较
print(3.14 > 3.0) # 输出:True
print(2.5 > 3.0) # 输出:False
# 负数比较
print(-5 > -10) # 输出:True
print(-10 > -5) # 输出:False3.2 小于运算符(<)
# 数字比较
print(5 < 10) # 输出:True
print(10 < 5) # 输出:False
print(10 < 10) # 输出:False
# 浮点数比较
print(3.0 < 3.14) # 输出:True
print(3.14 < 3.0) # 输出:False4. 大于等于和小于等于
4.1 大于等于运算符(>=)
# 数字比较
print(10 >= 5) # 输出:True
print(5 >= 10) # 输出:False
print(10 >= 10) # 输出:True(包含等于)
# 应用:判断是否成年
age = 18
is_adult = age >= 18
print(is_adult) # 输出:True4.2 小于等于运算符(<=)
# 数字比较
print(5 <= 10) # 输出:True
print(10 <= 5) # 输出:False
print(10 <= 10) # 输出:True
# 应用:判断是否未成年
age = 17
is_minor = age < 18
print(is_minor) # 输出:True5. 不同数据类型的比较
5.1 数字比较
# 整数比较
print(10 > 5) # True
# 浮点数比较
print(3.14 < 3.15) # True
# 整数和浮点数比较
print(10 == 10.0) # True
print(10 > 9.5) # True5.2 字符串比较
字符串比较是基于字符的Unicode码点值,按字典顺序比较。
# 单个字符比较
print('a' < 'b') # 输出:True
print('A' < 'a') # 输出:True(大写字母的码点值小于小写字母)
# 字符串比较
print('apple' < 'banana') # 输出:True(按字典顺序)
print('hello' > 'hell') # 输出:True(较长字符串在相同前缀下更大)
print('Python' == 'Python') # 输出:True
# 注意:大小写敏感
print('hello' == 'Hello') # 输出:False
print('hello' != 'Hello') # 输出:True
# 统一大小写后比较
print('hello'.lower() == 'Hello'.lower()) # 输出:True5.3 列表比较
# 列表比较(按元素逐个比较)
print([1, 2, 3] == [1, 2, 3]) # 输出:True
print([1, 2, 3] != [1, 2, 4]) # 输出:True
print([1, 2] < [1, 3]) # 输出:True(比较对应位置的元素)
# 长度不同的列表
print([1, 2, 3] > [1, 2]) # 输出:True
print([1, 2] < [1, 2, 3]) # 输出:True6. 字符串比较详解
6.1 字符的Unicode码点
# 查看字符的Unicode码点
print(ord('A')) # 输出:65
print(ord('a')) # 输出:97
print(ord('0')) # 输出:48
print(ord('中')) # 输出:20013
# 因此:'0' < 'A' < 'a'
print('0' < 'A') # 输出:True
print('A' < 'a') # 输出:True6.2 字符串按字典顺序比较
# 相同前缀的字符串
print('apple' < 'apples') # 输出:True(较短字符串在相同前缀下较小)
# 不同开头的字符串
print('apple' < 'banana') # 输出:True('a' < 'b')
# 首字母相同,比较后续
print('apple' < 'apricot') # 输出:True('p' < 'r')6.3 忽略大小写比较
# 统一转换为小写
str1 = "Hello"
str2 = "hello"
print(str1.lower() == str2.lower()) # 输出:True
# 统一转换为大写
print(str1.upper() == str2.upper()) # 输出:True7. 综合应用示例
7.1 数字范围判断
"""
判断数字是否在某个范围内
"""
# 判断年龄是否在合法范围内
age = 25
is_valid_age = 0 <= age <= 120
print(f"年龄{age}是否合法:{is_valid_age}")
# 判断成绩是否及格
score = 85
is_passing = score >= 60
print(f"成绩{score}是否及格:{is_passing}")
# 判断温度是否舒适
temperature = 25
is_comfortable = 18 <= temperature <= 28
print(f"温度{temperature}°C是否舒适:{is_comfortable}")7.2 多条件判断
"""
多条件判断
"""
# 判断是否为工作日
day = 3
is_weekday = 1 <= day <= 5
print(f"第{day}天是否为工作日:{is_weekday}")
# 判断是否为有效月份
month = 6
is_valid_month = 1 <= month <= 12
print(f"月份{month}是否有效:{is_valid_month}")7.3 成绩等级判断
"""
根据成绩判断等级
"""
score = 85
if score >= 90:
grade = "优秀"
elif score >= 80:
grade = "良好"
elif score >= 70:
grade = "中等"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(f"成绩:{score}分,等级:{grade}")7.4 数字排序
"""
比较三个数的大小
"""
a = 15
b = 8
c = 20
# 找最大值
max_value = a
if b > max_value:
max_value = b
if c > max_value:
max_value = c
print(f"最大值:{max_value}")
# 找最小值
min_value = a
if b < min_value:
min_value = b
if c < min_value:
min_value = c
print(f"最小值:{min_value}")
# 排序(使用内置函数)
numbers = [a, b, c]
numbers.sort()
print(f"排序后:{numbers}")7.5 登录验证
"""
简单的登录验证
"""
# 模拟用户信息
stored_username = "admin"
stored_password = "123456"
# 用户输入
username = input("请输入用户名:")
password = input("请输入密码:")
# 验证
if username == stored_username and password == stored_password:
print("登录成功!")
else:
print("用户名或密码错误!")8. 常见错误
8.1 混淆赋值和比较
# 错误:在if语句中使用=
x = 5
if x = 10: # 错误:SyntaxError: invalid syntax
print("x is 10")
# 正确:使用==
if x == 10:
print("x is 10")8.2 比较不兼容类型
# 字符串和数字不能直接比较
print("10" == 10) # 输出:False
print("10" > 5) # TypeError: '>' not supported between instances of 'str' and 'int'
# 需要先转换为相同类型
print(int("10") == 10) # 输出:True8.3 浮点数精确比较
# 浮点数可能不精确
a = 0.1 + 0.2
b = 0.3
print(a == b) # 输出:False(因为0.1+0.2≠0.3,而是≈0.30000000000000004)
# 解决方法:使用近似比较或round()
import math
print(math.isclose(a, b)) # 输出:True
print(abs(a - b) < 1e-10) # 输出:True9. 特殊比较技巧
9.1 链式比较
# 链式比较
x = 10
print(0 < x < 20) # 输出:True(等价于 0 < x and x < 20)
print(5 <= x <= 15) # 输出:True
print(20 < x < 30) # 输出:False9.2 比较返回值
# 比较运算符的结果是布尔值,可以用于后续逻辑
a = 5
b = 10
result = a < b
print(result) # 输出:True
# 可以直接使用
if a < b:
print("a小于b")9.3 使用is和is not(身份比较)
# is和is not比较对象的身份(内存地址)
# ==和!=比较对象的值
# 小整数缓存(-5到256)
a = 100
b = 100
print(a is b) # 输出:True(同一对象)
print(a == b) # 输出:True(值相同)
# 大整数
a = 1000
b = 1000
print(a is b) # 输出:False(不同对象)
print(a == b) # 输出:True(值相同)
# 字符串
a = "hello"
b = "hello"
print(a is b) # 输出:True(字符串常量)
print(a == b) # 输出:True
# 列表
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # 输出:False(不同对象)
print(a == b) # 输出:True(值相同)
# None的比较
x = None
print(x is None) # 输出:True(推荐使用is判断None)
print(x == None) # 输出:True10. 本集总结
本集我们学习了:
- 6种比较运算符的使用方法
- 数字、字符串、列表的比较
- 字符串按字典顺序比较的规则
- 链式比较的写法
- ==与is的区别
- 多个实际应用示例
- 常见错误及解决方法
核心要点:
- 比较运算符返回布尔值(True或False)
- ==比较值,is比较对象身份
- 字符串比较基于Unicode码点,按字典顺序
- 链式比较(如
0 < x < 20)使代码更简洁 - 浮点数比较时注意精度问题
- 注意区分赋值(=)和比较(==)
下一集预告:我们将学习逻辑运算符,用于组合多个条件表达式。
11. 课后练习
- 编写程序,输入一个数字,判断是正数、负数还是零
- 编写程序,输入三个数字,输出最大值和最小值
- 编写程序,输入一个字符串,判断长度是否大于10
- 编写程序,输入成绩,输出对应的等级(优秀/良好/中等/及格/不及格)
- 编写程序,输入两个字符串,判断是否相等(忽略大小写)
提示:比较运算符是条件判断的基础,熟练掌握各种比较方式和注意事项非常重要!