1. Python判断语句基础入门
刚接触Python编程时,判断语句是最基础也最重要的控制结构之一。if语句就像我们日常做决定的过程:如果天气好就去公园,否则就在家看电影。在代码中,这种"如果...就..."的逻辑正是通过判断语句来实现的。
Python中的判断语句主要基于布尔值(True/False)进行条件判断,配合比较运算符(>, <, ==等)和逻辑运算符(and, or, not)构建复杂的条件表达式。掌握好判断语句,就能让程序根据不同情况执行不同的代码块,实现真正的"智能"决策。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 布尔类型与比较运算
2.1 布尔值基础
在Python中,布尔类型只有两个值:True和False。这两个值实际上分别是整数1和0的别名,但在逻辑判断中我们应该始终使用True/False来表示。
python复制is_raining = True
has_umbrella = False
2.2 比较运算符
比较运算符用于比较两个值,返回布尔结果:
==等于!=不等于>大于<小于>=大于等于<=小于等于
python复制age = 18
print(age >= 18) # 输出: True
print(age == 17) # 输出: False
2.3 逻辑运算符
逻辑运算符用于组合多个条件:
and与 - 所有条件都为True时返回Trueor或 - 任一条件为True时返回Truenot非 - 反转布尔值
python复制temperature = 25
is_weekend = True
print(temperature > 20 and is_weekend) # 输出: True
注意:Python中的and/or运算符具有短路特性,即一旦能确定整个表达式的结果就会停止计算。
3. if语句的基本结构
3.1 最简单的if语句
最基本的if语句由一个条件和一个代码块组成:
python复制if 条件:
# 条件为True时执行的代码
示例:
python复制score = 85
if score >= 60:
print("恭喜你及格了!")
3.2 if-else语句
当需要处理条件不成立的情况时,可以使用else:
python复制if 条件:
# 条件为True时执行的代码
else:
# 条件为False时执行的代码
示例:
python复制age = 17
if age >= 18:
print("可以观看此电影")
else:
print("未满18岁,禁止观看")
3.3 if-elif-else语句
当有多个条件需要判断时,可以使用elif(else if的缩写):
python复制if 条件1:
# 条件1为True时执行
elif 条件2:
# 条件2为True时执行
else:
# 以上条件都不满足时执行
示例:
python复制score = 78
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
4. 判断语句的高级用法
4.1 嵌套if语句
if语句可以嵌套使用,即在if代码块内部再使用if语句:
python复制age = 20
has_ticket = True
if has_ticket:
if age >= 18:
print("可以进入成人厅")
else:
print("只能进入儿童厅")
else:
print("请先购票")
4.2 单行if表达式
对于简单的条件判断,可以使用单行表达式:
python复制x = 10
result = "大于5" if x > 5 else "小于等于5"
print(result) # 输出: 大于5
4.3 判断语句中的真值测试
在Python中,以下值在布尔上下文中会被视为False:
- None
- False
- 0, 0.0等数值零
- 空序列:'', [], ()
- 空字典:{}
其他值都被视为True。这可以简化某些判断:
python复制name = ""
if not name:
print("姓名不能为空")
5. 常见问题与调试技巧
5.1 缩进错误
Python使用缩进来区分代码块,常见的缩进错误包括:
- 混用空格和制表符
- 缩进量不一致
- 忘记缩进
建议:使用4个空格作为标准缩进,并在编辑器中设置显示空白字符。
5.2 条件表达式错误
常见条件错误:
- 使用
=(赋值)而不是==(比较) - 运算符优先级问题
- 浮点数比较时的精度问题
python复制# 错误示例
if x = 10: # 应该用 ==
pass
# 浮点数比较建议
a = 0.1 + 0.2
if abs(a - 0.3) < 1e-9: # 使用极小值判断
print("相等")
5.3 多条件判断顺序
当使用多个elif时,条件的顺序很重要:
python复制score = 85
# 错误顺序
if score >= 60:
print("及格")
elif score >= 80: # 这个条件永远不会被触发
print("良好")
5.4 调试技巧
- 使用print输出中间变量值
- 将复杂条件拆分为多个简单条件
- 使用断言检查假设条件
python复制x = 10
y = 20
# 调试示例
print(f"x={x}, y={y}") # 查看变量值
assert x > 0, "x应该是正数" # 验证假设
6. 实际应用案例
6.1 用户登录验证
python复制username = input("请输入用户名: ")
password = input("请输入密码: ")
correct_username = "admin"
correct_password = "123456"
if not username or not password:
print("用户名和密码不能为空")
elif username == correct_username and password == correct_password:
print("登录成功")
else:
print("用户名或密码错误")
6.2 成绩评级系统
python复制def grade_score(score):
if not isinstance(score, (int, float)):
return "无效输入"
if score < 0 or score > 100:
return "分数超出范围"
elif score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
print(grade_score(85)) # 输出: B
6.3 闰年判断
python复制def is_leap_year(year):
if year % 4 != 0:
return False
elif year % 100 != 0:
return True
else:
return year % 400 == 0
print(is_leap_year(2000)) # 输出: True
print(is_leap_year(1900)) # 输出: False
7. 性能优化与最佳实践
7.1 条件顺序优化
将最可能为True的条件放在前面,可以减少不必要的判断:
python复制# 优化前
if x < 0: # 很少发生
handle_negative()
elif x == 0: # 偶尔发生
handle_zero()
else: # 最常见情况
handle_positive()
# 优化后
if x > 0: # 最常见情况放在前面
handle_positive()
elif x == 0:
handle_zero()
else:
handle_negative()
7.2 避免深层嵌套
深层嵌套会降低代码可读性,可以通过提前返回或拆分函数来优化:
python复制# 优化前
if condition1:
if condition2:
if condition3:
# 业务逻辑
else:
# 处理else
else:
# 处理else
else:
# 处理else
# 优化后
if not condition1:
# 处理else
return
if not condition2:
# 处理else
return
if not condition3:
# 处理else
return
# 业务逻辑
7.3 使用字典替代复杂if-elif
当有多个离散值需要判断时,字典可能更清晰:
python复制# if-elif方式
def handle_status(status):
if status == 'success':
return "操作成功"
elif status == 'fail':
return "操作失败"
elif status == 'pending':
return "操作进行中"
else:
return "未知状态"
# 字典方式
def handle_status(status):
status_map = {
'success': "操作成功",
'fail': "操作失败",
'pending': "操作进行中"
}
return status_map.get(status, "未知状态")
8. Python判断语句的特殊用法
8.1 链式比较
Python支持数学中的链式比较写法:
python复制x = 5
print(1 < x < 10) # 输出: True
# 等价于 1 < x and x < 10
8.2 成员运算符
使用in/not in判断元素是否在容器中:
python复制fruits = ['apple', 'banana', 'orange']
print('apple' in fruits) # 输出: True
print('pear' not in fruits) # 输出: True
8.3 海象运算符(Python 3.8+)
在条件判断的同时赋值:
python复制# 传统写法
data = get_data()
if data:
process(data)
# 使用海象运算符
if data := get_data():
process(data)
8.4 any()和all()函数
any(): 任意元素为True则返回True
all(): 所有元素为True才返回True
python复制numbers = [1, 2, 0, 4]
print(any(numbers)) # 输出: True
print(all(numbers)) # 输出: False
9. 与其他语言的对比
9.1 与C/Java的switch对比
Python没有switch语句,但可以通过字典或if-elif实现类似功能:
python复制# C/Java中的switch
switch(day) {
case 1: printf("Monday"); break;
case 2: printf("Tuesday"); break;
// ...
}
# Python实现
day = 2
if day == 1:
print("Monday")
elif day == 2:
print("Tuesday")
# ...
9.2 条件表达式差异
Python使用elif而不是else if,条件表达式不需要括号:
python复制# C/Java
if (x > 0) {
// code
} else if (x < 0) {
// code
}
# Python
if x > 0:
# code
elif x < 0:
# code
9.3 真值测试差异
某些语言中只有true/false可以作为条件,而Python中任何值都可以:
python复制# JavaScript中会报错
if ("hello") { /* code */ }
# Python中可以
if "hello":
print("这个字符串被视为True")
10. 练习题与答案
10.1 基础练习
- 编写一个程序,判断用户输入的数是奇数还是偶数
- 编写一个程序,根据用户输入的分数给出等级(A-F)
- 编写一个程序,判断用户输入的年份是否是闰年
10.2 进阶练习
- 实现一个简单的计算器,支持加减乘除运算
- 编写一个程序,判断字符串是否是回文
- 实现一个简单的登录系统,有三次尝试机会
10.3 练习答案示例
python复制# 1. 奇偶数判断
num = int(input("请输入一个整数: "))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
# 2. 分数评级
score = float(input("请输入分数(0-100): "))
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"你的等级是: {grade}")
# 3. 闰年判断
year = int(input("请输入年份: "))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(f"{year}年是闰年")
else:
print(f"{year}年不是闰年")
