Python案例如何使用判断语句?

wen python案例 18

Python判断语句的5个经典案例与避坑指南

📌 目录导读

  1. 判断语句核心概念:if、elif、else的底层逻辑
  2. 案例一:用户登录权限验证(嵌套判断实战)
  3. 案例二:成绩等级划分(多条件链式判断)
  4. 案例三:天气穿衣建议系统(组合逻辑运算符)
  5. 案例四:彩票号码比对(列表与判断结合)
  6. 案例五:日期有效性验证(异常处理+判断)
  7. 高频错误与优化建议:新手常见3大坑
  8. 问答环节:5个典型问题与解答

判断语句核心概念

在Python中,判断语句(Conditional Statement)通过比较表达式来控制程序执行分支,其核心语法如下:

Python案例如何使用判断语句?

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 -*-即可。

抱歉,评论功能暂时关闭!