Python控制流程全面解析:从基础到进阶,写出优雅高效代码

系列文章目录

01-快速上手Python编程:零基础也能轻松掌握的入门指南
02-Python控制流程全面解析:从基础到进阶,写出优雅高效代码


文章目录

  • 系列文章目录
  • 前言
  • 一、条件语句:if-elif-else
  • 1.1 基本语法
  • 1.2 示例代码
  • 1.2.1 判断数字正负性
  • 1.2.2 多条件判断
  • 1.2.3 嵌套的条件语句
  • 1.3 条件表达式的简化
  • 1.4 常见问题与注意事项
  • 1.4.1 条件表达式的布尔值
  • 1.4.2 缩进必须一致
  • 1.5 实际应用场景
  • 1.5.1 场景1:登录系统的简单验证
  • 1.5.2 场景2:判断某年是否为闰年
  • 二、循环结构:for 与 while
  • 2.1 `for` 循环
  • 2.1.1 基本语法
  • 2.1.2 示例代码
  • 示例1:遍历列表
  • 示例2:遍历字符串
  • 示例3:使用 `range()` 函数
  • 示例4:遍历字典
  • 2.2 `while` 循环
  • 2.2.1 基本语法
  • 2.2.2 示例代码
  • 示例1:简单的计数器
  • 示例2:用户输入验证
  • 示例3:无限循环
  • 2.3 循环嵌套
  • 示例:九九乘法表
  • 2.4 注意事项
  • 2.5 for 与 while 的选择
  • 三、循环控制语句:break 与 continue
  • 3.1 `break` 语句:终止循环
  • 3.1.1 基本语法
  • 3.1.2 示例代码
  • 示例1:查找目标值并停止循环
  • 示例2:退出无限循环
  • 3.2 `continue` 语句:跳过本次循环
  • 3.2.1 基本语法
  • 3.2.2 示例代码
  • 示例1:筛选并跳过偶数
  • 示例2:处理输入时跳过不符合条件的内容
  • 3.3 注意事项
  • 四、列表推导式与生成器表达式
  • 4.1 列表推导式
  • 4.1.1 基本语法
  • 4.1.2 示例代码
  • 示例1:生成一个平方数列表
  • 示例2:筛选偶数
  • 示例3:处理字符串列表
  • 4.2 生成器表达式
  • 4.2.1 基本语法
  • 4.2.2 示例代码
  • 示例1:生成平方数生成器
  • 示例2:筛选数据生成器
  • 4.3 列表推导式与生成器表达式的区别
  • 4.4 注意事项
  • 五、总结

  • 前言

    Python 以其简洁明了的语法和强大的功能,被誉为编程新手的首选语言。在编写程序时,控制流程 是不可或缺的核心部分。它让你的代码具备逻辑判断的能力(如条件语句),还能重复执行任务(如循环结构),大大提高代码的灵活性和可扩展性。更进一步,Python 提供了独特的列表推导式生成器表达式,不仅让代码更优雅,还能有效提升性能。

    如果你曾困惑于如何优雅地处理条件判断,或者如何在遍历数据时实现高效控制,那么这篇文章就是为你量身定制的。通过本文,你将全面掌握 Python 中的条件语句循环结构循环控制语句,以及 Python 中最具特色的列表推导式与生成器表达式,从而写出更简洁、更易读的代码。


    一、条件语句:if-elif-else

    条件语句是程序逻辑控制的基础,允许程序根据不同的条件执行不同的代码块。在 Python 中,条件语句主要由 ifelifelse 组成,其语法简洁明了,便于阅读和使用。


    1.1 基本语法

    Python 的条件语句通过缩进表示代码块的层次,且条件表达式返回的必须是布尔值(TrueFalse)。

    基本结构:

    if 条件1:
        执行语句块1
    elif 条件2:
        执行语句块2
    else:
        执行语句块3
    
  • if 用于判断条件是否为真。如果为真,则执行对应的代码块。
  • elif 可选的,表示多个条件分支。可以有多个 elif 分支。
  • else 可选的,表示所有条件均不满足时执行的代码块。
  • 注意事项:

  • 缩进必须统一,建议使用 4 个空格
  • elifelse 是可选的,但 if 是必须的。

  • 1.2 示例代码

    1.2.1 判断数字正负性

    以下示例判断一个数字是正数、负数还是零:

    number = int(input("请输入一个整数:"))
    if number > 0:
        print("这是一个正数")
    elif number < 0:
        print("这是一个负数")
    else:
        print("这是零")
    

    运行结果示例:

    输入:5
    输出:这是一个正数
    

    1.2.2 多条件判断

    以下示例根据考试成绩给出等级评价:

    score = int(input("请输入考试成绩:"))
    if score >= 90:
        print("优秀")
    elif score >= 80:
        print("良好")
    elif score >= 60:
        print("及格")
    else:
        print("不及格")
    

    运行结果示例:

    输入:85
    输出:良好
    

    1.2.3 嵌套的条件语句

    条件语句可以嵌套使用,用于处理更复杂的逻辑。

    age = int(input("请输入你的年龄:"))
    if age >= 18:
        print("你是成年人")
        if age >= 60:
            print("你已经达到退休年龄")
    else:
        print("你还未成年")
    

    运行结果示例:

    输入:65
    输出:
    你是成年人
    你已经达到退休年龄
    

    1.3 条件表达式的简化

    Python 支持使用单行条件表达式简化简单的 if-else 语句。

    基本语法:

    值1 if 条件 else 值2
    

    示例:

    number = int(input("请输入一个整数:"))
    result = "正数" if number > 0 else "负数或零"
    print(result)
    

    运行结果示例:

    输入:-5
    输出:负数或零
    

    1.4 常见问题与注意事项

    1.4.1 条件表达式的布尔值

    条件语句中的条件会被自动转换为布尔值进行判断:

  • 以下值会被视为 FalseNone0、空字符串 ""、空列表 []、空字典 {}
  • 其他值会被视为 True
  • 示例:

    if []:  # 空列表
        print("这是 True")
    else:
        print("这是 False")
    

    输出:

    这是 False
    

    1.4.2 缩进必须一致

    缩进是 Python 条件语句的核心。如果缩进不一致,将引发 IndentationError

    错误示例:

    if True:
        print("正确缩进")
      print("错误缩进")  # 缩进不一致
    

    报错信息:

    IndentationError: unindent does not match any outer indentation level
    

    1.5 实际应用场景

    1.5.1 场景1:登录系统的简单验证

    username = input("请输入用户名:")
    password = input("请输入密码:")
    
    if username == "admin" and password == "123456":
        print("登录成功")
    else:
        print("用户名或密码错误")
    

    1.5.2 场景2:判断某年是否为闰年

    year = int(input("请输入年份:"))
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        print(f"{year} 是闰年")
    else:
        print(f"{year} 不是闰年")
    

    二、循环结构:for 与 while

    循环是程序控制流程中重要的一部分,用于让代码块在满足条件时重复执行。Python 提供了两种主要的循环结构:for 循环while 循环,它们可以处理不同的循环场景。


    2.1 for 循环

    for 循环主要用于遍历可迭代对象,如列表、元组、字符串、字典、集合或使用 range() 函数生成的数字序列。

    2.1.1 基本语法

    for 变量 in 可迭代对象:
        执行语句块
    
  • 变量:在每次循环中,依次取出可迭代对象中的元素,并赋值给该变量。
  • 可迭代对象:可以是列表、字符串、字典等数据结构。
  • 语句块:循环体中要执行的代码。
  • 2.1.2 示例代码

    示例1:遍历列表
    fruits = ["苹果", "香蕉", "橙子"]
    for fruit in fruits:
        print(f"我喜欢吃{fruit}")
    

    输出:

    我喜欢吃苹果
    我喜欢吃香蕉
    我喜欢吃橙子
    
    示例2:遍历字符串
    text = "Python"
    for char in text:
        print(f"当前字符:{char}")
    

    输出:

    当前字符:P
    当前字符:y
    当前字符:t
    当前字符:h
    当前字符:o
    当前字符:n
    
    示例3:使用 range() 函数

    range(start, stop, step) 函数生成一系列数字序列,默认从 start=0 开始,步长 step=1

    for i in range(1, 6):  # 生成 1 到 5 的整数
        print(f"第 {i} 次循环")
    

    输出:

    第 1 次循环
    第 2 次循环
    第 3 次循环
    第 4 次循环
    第 5 次循环
    
    示例4:遍历字典
    scores = {"Alice": 90, "Bob": 85, "Charlie": 95}
    for name, score in scores.items():
        print(f"{name} 的分数是 {score}")
    

    输出:

    Alice 的分数是 90
    Bob 的分数是 85
    Charlie 的分数是 95
    

    2.2 while 循环

    while 循环用于在条件为 True 时重复执行代码块。当条件为 False 时,循环终止。

    2.2.1 基本语法

    while 条件:
        执行语句块
    
  • 条件:一个布尔表达式,控制循环是否继续执行。
  • 语句块:循环体中要执行的代码。
  • 2.2.2 示例代码

    示例1:简单的计数器
    count = 1
    while count <= 5:
        print(f"当前计数:{count}")
        count += 1
    

    输出:

    当前计数:1
    当前计数:2
    当前计数:3
    当前计数:4
    当前计数:5
    
    示例2:用户输入验证
    password = ""
    while password != "123456":
        password = input("请输入密码:")
    print("密码正确,登录成功!")
    

    输入示例:

    请输入密码:abc
    请输入密码:123456
    密码正确,登录成功!
    
    示例3:无限循环

    当条件始终为 True 时,while 会变成无限循环,通常需要通过 break 或外部条件来终止。

    while True:
        command = input("请输入命令(exit退出):")
        if command == "exit":
            print("程序退出")
            break
        else:
            print(f"执行命令:{command}")
    

    输出示例:

    请输入命令(exit退出):help
    执行命令:help
    请输入命令(exit退出):exit
    程序退出
    

    2.3 循环嵌套

    在 Python 中,forwhile 循环可以嵌套使用,用于处理多层次循环。

    示例:九九乘法表

    for i in range(1, 10):
        for j in range(1, i + 1):
            print(f"{j} x {i} = {j * i}", end="\t")
        print()
    

    输出:

    1 x 1 = 1	
    1 x 2 = 2	2 x 2 = 4	
    1 x 3 = 3	2 x 3 = 6	3 x 3 = 9	
    ...
    

    2.4 注意事项

    1. 避免死循环:
      在使用 while 时,如果条件表达式始终为 True 且没有退出机制,可能会导致死循环。

      count = 0
      while count < 5:  # 正确示例
          print(count)
          count += 1
      
    2. 避免修改 for 循环的迭代变量:
      for 循环中,尽量不要手动修改循环变量,否则会导致结果不可预期。

      for i in range(5):
          i += 1  # 不推荐
          print(i)
      
    3. 合理使用 breakcontinue
      在复杂的嵌套循环中,滥用 breakcontinue 会降低代码可读性,需谨慎使用。


    2.5 for 与 while 的选择

    1. 使用场景:

    2. for 循环:适合遍历固定范围或已知大小的可迭代对象。
    3. while 循环:适合条件未知,需动态判断是否继续的场景。
    4. 性能对比:

    5. 两者性能差异较小,但 for 循环通常更加直观,代码结构更简洁。

    三、循环控制语句:break 与 continue

    循环控制语句用于改变循环的执行流程,使得我们可以更灵活地控制循环的行为。在 Python 中,常用的控制语句有 breakcontinue


    3.1 break 语句:终止循环

    break 语句的作用是立即退出当前循环,无论循环条件是否仍为真,循环都会提前结束。

    3.1.1 基本语法

    for/while 条件:
        if 条件:
            break
        执行其他操作
    

    3.1.2 示例代码

    示例1:查找目标值并停止循环
    numbers = [1, 2, 3, 4, 5]
    for num in numbers:
        if num == 3:
            print("找到目标值 3,停止循环")
            break
        print(f"当前数字是:{num}")
    

    输出:

    当前数字是:1
    当前数字是:2
    找到目标值 3,停止循环
    
    示例2:退出无限循环

    break 常用于在满足条件时退出无限循环。

    while True:
        command = input("请输入命令(输入 'exit' 退出):")
        if command == "exit":
            print("程序结束")
            break
        print(f"你输入的命令是:{command}")
    

    运行示例:

    请输入命令(输入 'exit' 退出):help
    你输入的命令是:help
    请输入命令(输入 'exit' 退出):exit
    程序结束
    

    3.2 continue 语句:跳过本次循环

    continue 语句的作用是跳过当前循环的剩余代码,直接进入下一次循环的判断。它不会终止整个循环。

    3.2.1 基本语法

    for/while 条件:
        if 条件:
            continue
        执行其他操作
    

    3.2.2 示例代码

    示例1:筛选并跳过偶数
    for i in range(1, 11):
        if i % 2 == 0:  # 如果是偶数,跳过本次循环
            continue
        print(i)
    

    输出:

    1
    3
    5
    7
    9
    
    示例2:处理输入时跳过不符合条件的内容
    words = ["apple", "", "banana", None, "cherry"]
    for word in words:
        if not word:  # 如果是空字符串或 None,跳过
            continue
        print(f"有效单词:{word}")
    

    输出:

    有效单词:apple
    有效单词:banana
    有效单词:cherry
    

    3.3 注意事项

    1. breakcontinue 只影响当前循环:它们不会直接作用于外层嵌套的循环。
    2. 避免滥用:在代码中频繁使用 breakcontinue 可能会降低代码的可读性,建议仅在必要时使用。
    3. 搭配条件语句使用:通常与 if 条件一起使用,以实现对特定条件的处理。

    四、列表推导式与生成器表达式

    Python 提供了简洁且高效的方法来构造列表和生成器——列表推导式生成器表达式,它们是处理循环和条件的高级工具。


    4.1 列表推导式

    列表推导式是一种用于生成列表的简洁方式。它不仅可以替代繁琐的 for 循环,还可以通过条件筛选数据。

    4.1.1 基本语法

    [表达式 for 变量 in 可迭代对象 if 条件]
    
  • 表达式:生成每个元素的逻辑。
  • 变量:循环中每次迭代的变量。
  • 可迭代对象:可以是列表、元组、字符串或使用 range() 等生成的对象。
  • 条件:可选,用于筛选满足条件的元素。
  • 4.1.2 示例代码

    示例1:生成一个平方数列表
    squares = [x**2 for x in range(1, 6)]
    print(squares)  # 输出:[1, 4, 9, 16, 25]
    
    示例2:筛选偶数
    evens = [x for x in range(1, 11) if x % 2 == 0]
    print(evens)  # 输出:[2, 4, 6, 8, 10]
    
    示例3:处理字符串列表
    words = ["Python", "java", "C++", "ruby"]
    upper_words = [word.upper() for word in words if len(word) > 3]
    print(upper_words)  # 输出:['PYTHON', 'JAVA', 'RUBY']
    

    4.2 生成器表达式

    生成器表达式与列表推导式类似,但它生成的是一个生成器对象,而不是直接生成一个列表。生成器可以按需动态生成数据,适合处理大数据量的场景。

    4.2.1 基本语法

    (表达式 for 变量 in 可迭代对象 if 条件)
    

    与列表推导式的区别:

  • 列表推导式使用方括号 [],而生成器表达式使用小括号 ()
  • 列表推导式会一次性生成所有元素,而生成器表达式按需生成元素,占用内存更少。
  • 4.2.2 示例代码

    示例1:生成平方数生成器
    squares_gen = (x**2 for x in range(1, 6))
    for value in squares_gen:
        print(value)  # 依次输出:1, 4, 9, 16, 25
    
    示例2:筛选数据生成器
    evens_gen = (x for x in range(1, 11) if x % 2 == 0)
    print(list(evens_gen))  # 转换为列表输出:[2, 4, 6, 8, 10]
    

    4.3 列表推导式与生成器表达式的区别

    特性 列表推导式 生成器表达式
    输出类型 列表(占用内存较多) 生成器对象(按需生成,节省内存)
    使用场景 适合数据量较小的场景 适合数据量较大或无限数据流的场景
    语法 方括号 [] 小括号 ()

    4.4 注意事项

    1. 性能选择

    2. 如果需要所有数据一次性生成,使用列表推导式。
    3. 如果数据量大或只需按需获取,使用生成器表达式。
    4. 嵌套推导

    5. 列表推导式和生成器表达式可以嵌套使用,但过于复杂的嵌套可能降低代码可读性。

    五、总结

    1. 条件语句(if-elif-else): 学会根据不同条件执行不同的代码块,熟悉逻辑判断与条件表达式的简化写法。
    2. 循环结构(for 与 while): 理解 forwhile 的不同应用场景,以及如何遍历序列或实现条件驱动的循环。
    3. 循环控制语句(break 与 continue): 掌握如何提前退出循环或跳过某些不需要执行的循环步骤,提高代码灵活性。
    4. 列表推导式与生成器表达式: 学习用更简洁的方式构造列表或生成器,提升代码效率并节省内存。

    作者:吴师兄大模型

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python控制流程全面解析:从基础到进阶,写出优雅高效代码

    发表回复