Python判断语句的5个经典案例与避坑指南
📌 目录导读
- 判断语句核心概念:if、elif、else的底层逻辑
- 案例一:用户登录权限验证(嵌套判断实战)
- 案例二:成绩等级划分(多条件链式判断)
- 案例三:天气穿衣建议系统(组合逻辑运算符)
- 案例四:彩票号码比对(列表与判断结合)
- 案例五:日期有效性验证(异常处理+判断)
- 高频错误与优化建议:新手常见3大坑
- 问答环节:5个典型问题与解答
判断语句核心概念
在Python中,判断语句(Conditional Statement)通过比较表达式来控制程序执行分支,其核心语法如下:

if 条件1:
执行块1
elif 条件2:
执行块2
else:
默认执行块
关键点:
- 每个条件后的冒号不可省略
- 缩进统一为4个空格或1个Tab(禁止混用)
- 条件表达式支持比较运算符(==, !=, >, <, >=, <=)和逻辑运算符(and, or, not)
搜索引擎优化提示:本文所有代码均经过Python 3.10+环境测试,新手可直接复制运行。
案例一:用户登录权限验证(嵌套判断实战)
场景描述:某系统需要根据用户角色(管理员/普通用户/访客)展示不同操作菜单,同时验证密码安全性。
role = input("请输入角色(admin/user/guest):")
password = input("请输入密码:")
if role == "admin":
if password == "Admin@123":
print("欢迎管理员!您拥有系统全部权限。")
else:
print("密码错误,管理员登录失败。")
elif role == "user":
if len(password) >= 8:
print("用户登录成功,享有阅读与评论权限。")
else:
print("密码强度不足(需≥8位),请重新输入。")
else:
print("访客登录,仅可浏览公开内容。")
核心逻辑:先通过外层if区分角色,再通过内层if对密码进行二次验证,这种嵌套结构适合处理层级化的业务规则。
案例二:成绩等级划分(多条件链式判断)
场景描述:根据学生分数输出等级,要求:90+为A,80-89为B,70-79为C,60-69为D,<60为E。
score = float(input("请输入学生成绩:"))
# 使用链式判断,且注意顺序(从高到低避免逻辑重叠)
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "E"
print(f"您的成绩等级为:{grade}")
优化建议:如果分数范围很小(如0-100),可以直接用列表+字典映射;但链式if-elif在可读性和调试上更优,尤其是业务逻辑后期可能变动时。
案例三:天气穿衣建议系统(组合逻辑运算符)
场景描述:根据室外温度和降水概率,生成穿衣建议。
temperature = float(input("当前温度(℃):"))
rain_prob = float(input("降水概率(%):"))
if temperature > 30 and rain_prob < 20:
print("建议穿短袖+遮阳帽,注意防晒。")
elif temperature > 25 and rain_prob >= 50:
print("穿轻薄外套+带雨伞,防雨防闷热。")
elif temperature < 10 or rain_prob > 80:
print("穿羽绒服并带雨具,注意保暖。")
else:
print("常规穿搭即可,建议随身带薄外套。")
核心技巧:使用and/or连接多个条件,形成复合判断,特别注意or的短路特性:只要第一个条件为True,就不检查后续条件。
案例四:彩票号码比对(列表与判断结合)
场景描述:用户输入6个号码(1-33),与开奖号码完全一致即中奖。
winning_numbers = [5, 12, 18, 23, 29, 33]
user_numbers = []
for i in range(6):
num = int(input(f"请输入第{i+1}个号码(1-33):"))
user_numbers.append(num)
# 判断核心:使用比较列表是否相同
if set(user_numbers) == set(winning_numbers):
print("恭喜!你中了头奖!")
else:
# 进一步判断中了几位
match_count = sum(1 for n in user_numbers if n in winning_numbers)
print(f"很遗憾,你猜中了 {match_count} 个号码。")
重点:判断一个列表是否包含另一个列表的所有元素,可以用set去重后再比较,或者用all()函数:all(n in winning_numbers for n in user_numbers)。
案例五:日期有效性验证(异常处理+判断)
场景描述:判断用户输入的日期(年/月/日)是否合法,考虑闰年。
year = int(input("年份:"))
month = int(input("月份(1-12):"))
day = int(input("日期:"))
# 先判断月份与年份范围
if not (1 <= month <= 12 and 1 <= year <= 9999):
print("年份或月份超出范围")
else:
# 定义每月天数(2月暂设为28)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 判断闰年:能被4整除且不被100整除,或能被400整除
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
days_in_month[1] = 29
# 判断日期范围
if 1 <= day <= days_in_month[month-1]:
print(f"{year}年{month}月{day}日是合法日期")
else:
print("日期无效,请检查输入")
亮点:结合闰年判断公式与列表索引,避免复杂的多重嵌套,这个案例在真实项目中常被用于表单验证。
高频错误与优化建议
错误1:赋值与比较混淆
# 错误写法:if x = 5: (会语法报错) # 正确:if x == 5:
错误2:缩进不一致
混合使用Tab和空格会导致IndentationError,建议IDE设置为“用空格代替Tab”。
错误3:忽略边界值
例如用score > 60而不是score >= 60,导致60分被错误归为不通过。
优化建议:
- 复杂判断前先用变量存储中间结果,提升可读性
- 使用
elif而非多个if,避免重复计算 - 条件过多时考虑
match-case(Python 3.10+)
问答环节
Q1:if-elif-else和多个if语句有什么区别?
A:elif是互斥的,一旦满足某个条件,后续所有条件都会跳过;而多个独立if会逐个判断,无论之前是否满足,业务中若场景互斥(如成绩等级),必须用elif。
Q2:判断空字符串/空列表的正确方式是什么?
A:使用if not my_list:或if len(my_list) == 0:,注意不要写if my_list == []:,既低效又不通用。
Q3:条件运算符(三元表达式)如何使用?
A:result = "合格" if score >= 60 else "不合格",适合简单的二选一赋值,复杂逻辑应避免。
Q4:如何处理多个or条件的短路问题?
A:把最容易满足的条件放在最前面,例如if user_exists or (is_admin and is_online):,因为user_exists为True时后续不再判断。
Q5:判断语句能嵌套多少层?
A:理论无限制,但建议不超过3层,过深嵌套用“卫语句”优化:
# 不好的写法:if 条件: if 条件: if 条件: # 好的写法:先处理异常情况 if not condition1: return if not condition2: return # 然后主逻辑
提示:以上案例代码可直接保存为.py文件运行,如果遇到中文字符编码问题,在文件头部加上# -*- coding: utf-8 -*-即可。