Python流程控制详解与实践

目录

Python与Shell详细对比分析

一、核心定位与设计目标

二、语法与编程范式对比

三、典型应用场景

四、执行效率与维护性

if语句

 一、基础语法结构

二、核心规则与特性

三、不同分支类型详解

1. 单分支(仅if)

2. 双分支(if-else)

3. 多分支(if-elif-else)

四、高级用法与技巧

关系运算符

一、关系运算符(Comparison Operators)

核心特性:

二、逻辑运算符(Logical Operators)

核心特性:

三、常见应用场景

1. 条件语句(if判断)

2. 数据过滤

 Python的循环

一、while循环

1. 基本语法

2. 执行流程

3. 典型用法

4. 注意事项

二、for循环

1. 基本语法

2. 执行流程

3. 典型用法

4. 注意事项

三、循环控制语句

1. break:立即退出整个循环

2. continue:跳过当前迭代,进入下一次循环

3. else块:循环正常结束后的收尾

四、while vs for循环对比

五、常见错误与规避

六、高级技巧

实际案例

‌难度级别 1:基础应用‌

案例 1:判断数字正负

案例 2:简单三元运算符

‌难度级别 2:组合条件‌

案例 3:成绩等级判断

案例 4:闰年判断

‌难度级别 3:综合逻辑‌

案例 5:用户输入验证

案例 6:智能温度建议


    python提供了多种流程控制语句,其中包括了if语句、while循环、for循环、break和continue语句。这种流程控制在各语言中大同小异。以下将以Shell作为对照体来进行讲解:

Python与Shell详细对比分析

一、核心定位与设计目标
  • Shell
  • 定位为‌命令行解释器‌,核心功能是直接调用操作系统命令,擅长处理文件管理、进程调度等系统级任务。
  • 设计目标为‌快速实现简单自动化‌,例如批量文件重命名、日志过滤等。
  • Python
  • 作为‌通用编程语言‌,支持复杂程序开发(如Web应用、机器学习模型),强调代码可读性和跨平台能力。
  • 设计目标覆盖‌全栈开发‌,适用于高复杂度逻辑和数据结构操作。

  • 二、语法与编程范式对比
    特性 Shell Python
    变量声明 直接赋值(如var="value" 需显式赋值(如var = "value"
    条件判断 依赖[ ]test命令(如if [ -f file ] 直接布尔表达式(如if os.path.exists(file)
    循环结构 依赖管道符和命令组合(如for i in $(ls) 支持迭代器(如for file in os.listdir()
    错误处理 默认忽略错误继续执行 异常捕获机制(try-except)强制处理错误
    数据结构 仅支持简单字符串和数组 支持列表、字典、集合等复杂结构

    三、典型应用场景
  • Shell优先场景

    1. 快速执行系统命令(如grep "error" log.txt | wc -l);
    2. 轻量级自动化任务(如定时备份、日志清理);
    3. 依赖Unix/Linux环境工具链的操作(如awk/sed文本处理)。
  • Python优先场景

    1. 需要复杂逻辑(如多线程、网络请求);
    2. 跨平台兼容性需求(Windows/Linux通用脚本);
    3. 数据分析和科学计算(如pandas处理CSV、numpy矩阵运算)。

  • 四、执行效率与维护性
    维度 Shell Python
    执行速度 直接调用系统命令,文件操作效率高 解释型语言,但可通过C扩展优化性能
    调试难度 依赖echo调试,错误信息不直观 支持IDE调试和pdb模块
    代码可读性 命令组合复杂时难以维护 强制缩进,代码结构化程度高
    扩展能力 依赖外部命令,功能扩展受限 标准库+第三方库(如requests)生态丰富

    if语句

     一、基础语法结构

    Python的if语句用于条件判断,语法结构如下:

    if 条件1:
     # 条件1成立时执行的代码 
    elif 条件2:
     # 条件2成立时执行的代码 
    else:
     # 所有条件均不成立时执行的代码 
  • if‌:必选分支,用于检查第一个条件是否满足。
  • elif‌(可选):可多次使用,检查其他条件(类似“否则如果”)。
  • else‌(可选):兜底分支,所有条件不满足时执行。

  • 二、核心规则与特性

    1. 缩进强制要求
      Python通过缩进(通常4个空格)标识代码块,省略缩进会引发IndentationError

      if True:
       print("会报错!") # 缺少缩进 
    2. 条件表达式类型

    3. 条件可以是直接布尔值(True/False),或返回布尔值的表达式。
    4. 非布尔值会隐式转换:0None、空容器(如[]"")视为False,其他视为True
    5. if 1: # 条件为True 
      if "hello": # 条件为True 
      if []: # 条件为False 
    6. 多条件组合
      使用逻辑运算符and(与)、or(或)、not(非)连接多个条件。

      age = 25 
      if age >= 18 and age <= 60:
       print("成年人") 

    三、不同分支类型详解

    1. 单分支(仅if
    num = 10 
    if num > 0:
     print("正数") 
    2. 双分支(if-else
    num = -5 
    if num >= 0:
     print("非负数") 
    else:
     print("负数") 
    3. 多分支(if-elif-else
    score = 85 
    if score >= 90:
     print("优秀") 
    elif score >= 80:
     print("良好") 
    elif score >= 60:
     print("及格") 
    else:
     print("不及格") 

    四、高级用法与技巧

    1. 单行if语句(三元表达式)
      适用于简单赋值或返回值的场景。

      # 语法:结果1 if 条件 else 结果2 
      status = "通过" if score >= 60 else "未通过" 
    2. in关键字结合使用
      检查元素是否存在于容器(如列表、字符串)中。

      fruits = ["apple", "banana", "cherry"] 
      if "banana" in fruits:
       print("找到香蕉!") 
    3. 嵌套if语句
      在代码块内再次使用if判断,但需避免过度嵌套(一般不超过3层)。

      age = 20
       if age >= 18:
           if age <= 60:
            print("可参与工作") 
           else:
            print("已退休") 
    4. 类型与值双重验证
      使用isinstance()检查变量类型。

      value = "123" 
      if isinstance(value, str) and value.isdigit():
       print("是数字字符串")

    关系运算符

    一、关系运算符(Comparison Operators)

    用于比较两个值之间的关系,返回布尔值TrueFalse

    运算符 名称 示例 说明
    == 等于 3 == 5 → False 值相等返回True(注意类型严格匹配)
    != 不等于 3 != 5 → True 值不相等时返回True
    > 大于 10 > 5 → True 左值大于右值时成立
    < 小于 10 < 5 → False 左值小于右值时成立
    >= 大于等于 5 >= 5 → True 左值≥右值时成立
    <= 小于等于 5 <= 3 → False 左值≤右值时成立
    核心特性:
    1. 链式比较
      Python允许连续比较(如1 < x < 5),等价于(1 < x) and (x < 5)

      x = 3 
      print(1 < x < 5) # 输出 True 
    2. 类型敏感
      不同类型可能无法直接比较(如3 == "3"返回False)。

      print(3 == 3.0) # True(int与float数值相等) 
      print(3 == "3") # False(类型不同) 

    二、逻辑运算符(Logical Operators)

    用于组合多个布尔条件,构建复杂逻辑判断。

    运算符 名称 示例 说明
    and 逻辑与 (x > 5) and (x < 10) 所有条件为True时返回True
    or 逻辑或 (x < 0) or (x > 100) 至少一个条件为True时返回True
    not 逻辑非 not (x == y) 反转布尔值(TrueFalse,反之亦然)
    核心特性:
    1. 短路求值(Short-Circuiting)

    2. and:若左侧为False,直接返回False,不计算右侧。
    3. or:若左侧为True,直接返回True,不计算右侧。
    4. def check():
       print("函数被调用")
       return True 
      
      print(False and check()) # 输出 False(不执行check) 
      print(True or check()) # 输出 True(不执行check) 
    5. 返回实际值而非布尔值

    6. and:返回第一个为False的值(若无则返回最后一个值)。
    7. or:返回第一个为True的值(若无则返回最后一个值)。
    8. print(0 and 5) # 0(第一个假值) 
      print(3 and 5) # 5(全为真,返回最后一个) 
      print(0 or "hi") # "hi"(第一个真值) 

    三、常见应用场景

    1. 条件语句(if判断)
    age = 18 
    if age >= 18 and age <= 60:
     print("允许进入") 
    2. 数据过滤
    numbers = [10, 20, 30, 40] 
    filtered = [x for x in numbers if x > 15 and x % 4 == 0] 
    print(filtered) # 输出 [20, 40]

     Python的循环

    一、while循环
    1. 基本语法
    while 条件:
     # 循环体代码 
    else:
     # 当循环正常结束(非break退出)时执行的代码 
    2. 执行流程
    1. 检查条件是否为True
    2. 若为True,执行循环体代码,然后回到步骤1。
    3. 若为False,跳过循环体,执行else块(如果有)。
    3. 典型用法
  • 不确定次数的循环‌(如用户输入验证):

    password = "" 
    while password != "secret":
     password = input("请输入密码:") 
    print("登录成功!") 
  • 计数器控制循环‌:

    count = 0 
    while count < 5:
     print(f"当前计数:{count}")
     count += 1 
  • 4. 注意事项
  • 避免无限循环‌:确保循环条件最终变为False
  • else块的特殊性‌:仅在循环正常结束时执行(未触发break)。

  • 二、for循环
    1. 基本语法
    for 变量 in 可迭代对象:
     # 循环体代码 
    else:
     # 循环正常结束时执行 
    2. 执行流程
    1. 从可迭代对象(如列表、字符串、字典等)中依次取出元素。
    2. 每次迭代将元素赋值给变量,执行循环体。
    3. 遍历完成后,执行else块(如果有)。
    3. 典型用法
  • 遍历列表‌:

    fruits = ["apple", "banana", "cherry"] 
    for fruit in fruits:
     print(fruit) 
  • 遍历字典‌:

    person = {"name": "Alice", "age": 30} 
    for key in person: # 遍历键
     print(key) 
    for value in person.values(): # 遍历值
     print(value) 
    for k, v in person.items(): # 遍历键值对
     print(f"{k}: {v}") 
  • 使用range()生成序列‌:

    for i in range(5): # 0,1,2,3,4
     print(i) 
    for i in range(2, 10, 3): # 2,5,8(步长3)
     print(i) 
  • 4. 注意事项
  • 不要修改正在遍历的序列‌:可能导致意外跳过元素或无限循环。
  • 可迭代对象类型‌:支持字符串、列表、元组、字典、集合、文件对象等。

  • 三、循环控制语句
    1. break:立即退出整个循环
    # 搜索数字,找到后提前退出 
    numbers = [3, 7, 2, 9, 5] 
    target = 9 
    for num in numbers:
     if num == target:
       print("找到目标!")
       break 
    else:
     print("未找到") 
    2. continue:跳过当前迭代,进入下一次循环
    # 打印1~10中的奇数 
    for i in range(1, 11):
     if i % 2 == 0:
       continue
     print(i) 
    3. else块:循环正常结束后的收尾
    # 检查列表是否全为偶数 
    nums = [2, 4, 6, 8] 
    for n in nums:
     if n % 2 != 0:
     print("存在奇数")
     break 
    else:
     print("全部是偶数") 

    四、while vs for循环对比
    维度 while循环 for循环
    适用场景 不确定次数的循环(如等待条件变化) 遍历已知的可迭代对象(如列表、字符串)
    循环条件 依赖显式的布尔表达式 自动处理可迭代对象的遍历
    退出方式 条件变为False或手动break 遍历完成或手动break
    性能 可能因条件计算产生额外开销 通常更高效(针对迭代优化)

    五、常见错误与规避
    1. 无限循环‌:

      # 错误示例:缺少终止条件 
      while True:
       print("无限循环...") 
    2. 修改迭代中的列表‌:

      # 错误示例:遍历时删除元素 
      lst = [1, 2, 3, 4] 
      for num in lst:
       if num % 2 == 0:
         lst.remove(num) # 可能导致元素跳过 
    3. 误用else‌:

      # 错误理解:else块在循环结束后总会执行 
      for i in range(3):
       if i == 10:
         break 
      else:
       print("执行") # 实际会执行,因为未触发break 

    六、高级技巧
    1. 嵌套循环‌:

      for i in range(3):
       for j in range(2):
         print(f"({i}, {j})") 
    2. 使用enumerate()获取索引和值‌:

      fruits = ["apple", "banana", "cherry"]
       for index, fruit in enumerate(fruits):
          print(f"索引{index}: {fruit}") 
    3. 结合zip()并行遍历‌:

      names = ["Alice", "Bob"] 
      ages = [25, 30] 
      for name, age in zip(names, ages):
       print(f"{name} is {age} years old") 

    实际案例

    难度级别 1:基础应用

    案例 1:判断数字正负
    num = -5 
    if num > 0:
     print("正数") 
    elif num < 0:
     print("负数") 
    else:
     print("零") 
    # 输出: 负数 
    案例 2:简单三元运算符
    age = 18 
    status = "成年" if age >= 18 else "未成年" 
    print(status) # 输出: 成年 

    难度级别 2:组合条件

    案例 3:成绩等级判断
    score = 85 
    if score >= 90:
     grade = "A" 
    elif 80 <= score < 90:
     grade = "B" 
    elif 60 <= score < 80:
     grade = "C" 
    else:
     grade = "D" 
    print(f"成绩等级:{grade}") # 输出: B 
    案例 4:闰年判断
    year = 2024 
    is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) 
    print(f"{year}是闰年吗?{is_leap}") # 输出: True 

    难度级别 3:综合逻辑

    案例 5:用户输入验证
    username = "admin" 
    password = "123456" 
    # 验证用户名和密码长度,且不能包含空格 
    valid_user = len(username) >= 5 and ' ' not in username 
    valid_pass = len(password) >= 6 and ' ' not in password 
    print("验证通过" if valid_user and valid_pass else "验证失败") 
    # 输出: 验证通过 
    案例 6:智能温度建议
    temp = 28 
    humidity = 70 
    # 组合温度和湿度条件 
    advice = "开空调" if temp > 30 or (temp > 25 and humidity > 75) else "开风扇" 
    print(advice) # 输出: 开风扇 

    作者:霖檬ing

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python流程控制详解与实践

    发表回复