2、Python流程控制

Python流程控制

  • 本章学习知识点

    • 条件判断:if-elif-else、三元表达式(result = a if cond else b)

    • 循环:for 循环(遍历 range / 容器)、while 循环、循环控制(break/continue)

    • 输入输出:input ()(注意类型转换)、print ()(格式化输出:f-string/format)

一、输入输出

输入输出是程序与用户交互的桥梁,input() 用于获取用户输入,print() 用于展示结果。

1.1、input ()

  1. 语法:变量 = input("提示信息:")

    • 核心特性:
      1. 无论用户输入什么,input() 都返回 字符串类型(需手动转换为其他类型)
      2. 执行 input() 时,程序会暂停,等待用户输入并按回车后继续
      3. 提示信息可选(如 input() 直接等待输入,无提示)
  2. 基础用法(字符串输入)

    python 复制代码
    # 示例:获取字符串输入
    name = input("请输入你的姓名:")
    print(f"你好,{name}!")  # 直接使用字符串输入
    print(f"name 的类型:{type(name)}")  # 输出 <class 'str'>
  3. 类型转换(关键!处理数字输入)

    python 复制代码
    # 用户输入数字(如年龄、成绩)时,需用 int()/float() 转换为数值类型,否则无法进行算术运算。
    
    # 示例1:转换为整数(int())
    age_input = input("请输入你的年龄:")
    age = int(age_input)  # 转换为整数
    print(f"明年你将是 {age + 1} 岁")  # 可正常进行算术运算
    
    # 示例2:转换为浮点数(float())
    height_input = input("请输入你的身高(米):")
    height = float(height_input)
    print(f"你的身高是 {height} 米,即 {height * 100} 厘米")
    
    # 示例3:异常处理(避免输入非数字报错)
    try:
        score = int(input("请输入你的成绩:"))
        print(f"你的成绩是 {score} 分")
    except ValueError:
        print("输入错误!请输入整数成绩")

1.2、print ()

print() 用于输出内容,支持多种格式化方式,核心是让输出结果更易读。

  1. 语法:print(内容1, 内容2, ..., sep=' ', end='\n')

    • sep:多个内容之间的分隔符(默认空格)

    • end:输出结束后的字符(默认换行 \n,可改为空字符串 '' 不换行)

      python 复制代码
      # 示例1:输出多个内容
      print("Python", "流程控制", "手册")  # 分隔符默认空格,输出:Python 流程控制 手册
      print("Python", "流程控制", "手册", sep="|")  # 分隔符改为 |,输出:Python|流程控制|手册
      
      # 示例2:控制换行
      print("第一行", end="")  # 结束不换行
      print("第二行")  # 输出:第一行第二行
      
      # 示例3:输出变量
      name = "小红"
      age = 18
      print("姓名:", name, "年龄:", age)  # 输出:姓名: 小红 年龄: 18
  2. 格式化输出(重点!三种常用方式)

    1. 方式 1:f-string(Python3.6+ 推荐,简洁高效)

      • 语法:print(f"字符串内容 {变量/表达式} 字符串内容")

      • 特点:

        • f 开头,变量 / 表达式放在 {}
        • 支持直接在 {} 中写表达式(如运算、函数调用)
        • 可读性最强,书写最简洁
      • 示例

        python 复制代码
        # 示例1:基础变量格式化
        name = "小明"
        age = 20
        print(f"姓名:{name},年龄:{age}")  # 输出:姓名:小明,年龄:20
        
        # 示例2:表达式格式化
        score = 85
        print(f"成绩:{score} 分,等级:{'优秀' if score >= 90 else '良好' if score >= 80 else '及格'}")
        print(f"成绩的 2 倍:{score * 2}")  # 支持运算表达式
        
        # 示例3:数字格式化(保留小数、百分比等)
        pi = 3.1415926
        print(f"圆周率(保留 2 位小数):{pi:.2f}")  # 输出 3.14
        print(f"圆周率(保留 4 位小数):{pi:.4f}")  # 输出 3.1416
        print(f"百分比格式:{0.75:.2%}")  # 输出 75.00%
        print(f"整数补零(3 位):{5:03d}")  # 输出 005
    2. 方式 2:format () 方法(兼容性强,支持 Python2/3)

      • 语法:print("字符串内容 {} 字符串内容".format(变量1, 变量2, ...))

      • 特点:用 {} 作为占位符,通过 format() 传入变量,支持位置参数、关键字参数

      • 示例

        python 复制代码
        # 示例1:位置参数
        name = "小李"
        age = 22
        print("姓名:{},年龄:{}".format(name, age))  # 按顺序匹配
        print("年龄:{1},姓名:{0}".format(name, age))  # 按索引匹配(0 对应 name,1 对应 age)
        
        # 示例2:关键字参数
        print("姓名:{n},年龄:{a}".format(n="小张", a=25))  # 按关键字匹配
        
        # 示例3:数字格式化(与 f-string 类似)
        pi = 3.1415926
        print("圆周率(保留 2 位小数):{:.2f}".format(pi))  # 输出 3.14
        print("整数补零(3 位):{:03d}".format(8))  # 输出 008
    3. 方式 3:% 格式化(老式方法,了解即可)

      • 语法:print("字符串内容 %s 字符串内容" % 变量)

      • 占位符:%s(字符串)、%d(整数)、%f(浮点数)

      • 特点:兼容性最强,但可读性差,不推荐优先使用

      • 示例

        python 复制代码
        name = "小王"
        age = 19
        pi = 3.14159
        print("姓名:%s,年龄:%d" % (name, age))  # 输出:姓名:小王,年龄:19
        print("圆周率:%.2f" % pi)  # 输出:圆周率:3.14

二、条件判断

if 语句(单条件判断)、if-elif-else、嵌套条件判断、三元表达式

  1. 基础语法:if 语句(单条件判断)

    • 说明:条件表达式可以是布尔值、比较运算、逻辑运算等,结果必须是 TrueFalse

      python 复制代码
      if 条件表达式:  # 条件表达式结果为 True 时执行
          代码块  # 缩进 4 空格
    • 示例

      python 复制代码
      # 示例1:布尔值条件
      is_rainy = True
      if is_rainy:
          print("带雨伞出门")  # 条件为 True,执行该代码块
      
      # 示例2:比较运算条件
      age = 18
      if age >= 18:
          print("已成年,可独立办理业务")  # 18 >= 18 为 True,执行
      
      # 示例3:逻辑运算条件
      score = 85
      if score >= 80 and score <= 100:
          print("成绩优秀")  # 85 在 80-100 之间,执行
  2. 多条件判断:if-elif-else

    • 特点:互斥性,只要有一个条件满足,后续条件不再判断(效率优化)

      python 复制代码
      if 条件1:
          代码块1  # 条件1 为 True 时执行
      elif 条件2:
          代码块2  # 条件1 为 False,条件2 为 True 时执行
      elif 条件3:
          代码块3  # 前两个条件都为 False,条件3 为 True 时执行
      else:
          代码块4  # 所有条件都为 False 时执行
    • 示例

      python 复制代码
      # 实战:成绩分级
      score = 75
      if score >= 90:
          print("优秀")
      elif score >= 80:
          print("良好")
      elif score >= 60:
          print("及格")
      else:
          print("不及格")  # 75 >=60 为 True,输出"及格"
      
      # 实战:用户权限判断
      user_role = "editor"  # 角色:admin/editor/visitor
      if user_role == "admin":
          print("拥有所有权限:增删改查")
      elif user_role == "editor":
          print("拥有编辑权限:增改查")
      else:
          print("拥有只读权限:查询")  # 输出"拥有编辑权限:增改查"
  3. 嵌套条件判断(条件内套条件)

    • 语法:在 if/elif/else 的代码块中,再嵌套一层或多层 if 语句

    • 适用场景:需要先满足外层条件,再判断内层条件

      python 复制代码
      # 实战:登录验证(嵌套条件)
      username = "admin"
      password = "123456"
      is_verified = True  # 是否已实名认证
      
      if username == "admin" and password == "123456":
          print("账号密码验证通过")
          if is_verified:
              print("已实名认证,登录成功")  # 外层条件满足,内层条件也满足
          else:
              print("未实名认证,请完成认证后登录")
      else:
          print("账号或密码错误")
  4. 三元表达式(简洁版 if-else)

    • 语法:结果1 if 条件 else 结果2

      • 条件为 True 时,返回 结果1
      • 条件为 False 时,返回 结果2
    • 适用场景:简单的二选一逻辑(替代简短的 if-else,代码更简洁)

      python 复制代码
      # 示例1:基础用法
      age = 20
      result = "成年" if age >= 18 else "未成年"
      print(result)  # 输出"成年"
      
      # 示例2:结合运算
      a = 10
      b = 20
      max_num = a if a > b else b
      print(max_num)  # 输出 20(a < b,返回 b)
      
      # 示例3:嵌套三元表达式(不推荐多层,可读性差)
      score = 70
      result = "优秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格"
      print(result)  # 输出"及格"
      
      # 对比:三元表达式 vs if-else(简洁性体现)
      # if-else 写法(3行)
      if score >= 60:
          res = "通过"
      else:
          res = "未通过"
      
      # 三元表达式写法(1行)
      res = "通过" if score >= 60 else "未通过"
  5. 条件判断易错点

    1. 忘记缩进:if 后面的代码块必须缩进 4 空格,否则报错
    2. 条件表达式遗漏 :if 条件: 末尾的冒号不能少(语法要求)
    3. 多条件用 if 而非 elif:导致重复判断(如成绩分级用多个 if 会重复输出)
    4. 三元表达式嵌套过多:超过 2 层建议用 if-elif-else,保证可读性

三、循环语句

Python 提供两种循环:for 循环(适合已知循环次数)和 while 循环(适合未知循环次数)。

3.1、for循环

说明:遍历循环:已知次数 / 可迭代对象, 三种: 遍历 range, 遍历容器,枚举遍历

  1. 语法

    bash 复制代码
    for 变量 in 可迭代对象:
        代码块  # 缩进 4 空格
    • 可迭代对象:能逐一取出元素的对象,如 range、列表、字符串、字典、集合等
    • 核心:遍历可迭代对象的每个元素,执行一次代码块
  2. 遍历 range(生成整数序列,适合固定次数循环)

    • 语法:

      • range(n):生成 0 ~ n-1 的整数(如 range(5) → 0,1,2,3,4)
      • range(start, end):生成 start ~ end-1 的整数(左闭右开,如 range(1,5) → 1,2,3,4)
      • range(start, end, step):步长为 step(每次递增 / 递减 step,如 range(1,10,2) → 1,3,5,7,9)
    • 示例

      python 复制代码
      # 示例1:循环 5 次(range(5))
      for i in range(5):
          print(f"第 {i+1} 次循环")  # i 从 0 到 4,输出 1-5 次
      
      # 示例2:循环 1-10(range(1,11))
      sum_1_10 = 0
      for num in range(1, 11):
          sum_1_10 += num  # 累加 1-10 的和
      print("1-10 的和:", sum_1_10)  # 输出 55
      
      # 示例3:步长为 3(range(3, 15, 3))
      for num in range(3, 15, 3):
          print(num, end=" ")  # 输出 3 6 9 12
  3. 遍历容器(列表、字符串、字典等)

    • 示例

      python 复制代码
      # 示例1:遍历列表
      fruits = ["苹果", "香蕉", "橙子"]
      for fruit in fruits:
          print(f"我喜欢吃 {fruit}")  # 依次输出每个水果
          
      # 示例2:遍历字符串(逐个字符)
      s = "Python"
      for char in s:
          print(f"字符:{char}")  # 输出 P y t h o n
      
      # 示例3:遍历字典(三种方式)
      person = {"name": "小明", "age": 20, "gender": "男"}
      # 方式1:遍历键(默认)
      for key in person:
          print(f"键:{key},值:{person[key]}")
      # 方式2:遍历键值对(推荐)
      for key, value in person.items():
          print(f"键:{key},值:{value}")
      # 方式3:遍历值
      for value in person.values():
          print(f"值:{value}")
      
      # 示例4:遍历集合(无序,去重)
      nums = {1, 2, 2, 3}
      for num in nums:
          print(num, end=" ")  # 输出 1 2 3(无序)
  4. 枚举遍历(enumerate:获取索引 + 元素)

    • 语法:for 索引, 元素 in enumerate(可迭代对象, start=0):

    • 作用:遍历的同时获取元素的索引(默认从 0 开始,start 可指定起始值)

    • 示例

      python 复制代码
      # 示例:枚举列表(索引从 1 开始)
      courses = ["语文", "数学", "英语"]
      for idx, course in enumerate(courses, start=1):
          print(f"第 {idx} 门课:{course}")
      # 输出:
      # 第 1 门课:语文
      # 第 2 门课:数学
      # 第 3 门课:英语
      
      # 示例:枚举字符串(索引从 0 开始)
      s = "Hello"
      for idx, char in enumerate(s):
          print(f"索引 {idx}:{char}")

3.2、while循环

说明:条件循环:未知次数,满足条件就循环, 两种: break 和 continue

  1. 语法:

    python 复制代码
    while 条件表达式:
        代码块  # 缩进 4 空格
        (必须有修改条件的代码,否则无限循环)
    • 核心:条件表达式为 True 时,重复执行代码块;为 False 时,退出循环

    • 关键:代码块中必须包含修改条件的语句(如 num +=1),否则会无限循环

    • 示例

      python 复制代码
      # 示例1:基础用法(循环 5 次)
      count = 0
      while count < 5:
          print(f"循环次数:{count+1}")
          count += 1  # 修改条件(count 递增,最终不满足 count <5)
      
      # 示例2:计算 1-100 的和
      sum_1_100 = 0
      num = 1
      while num <= 100:
          sum_1_100 += num
          num += 1  # 每次加 1,直到 num=101 退出
      print("1-100 的和:", sum_1_100)  # 输出 5050
      
      # 示例3:无限循环(需手动控制退出)
      while True:
          user_input = input("请输入内容(输入 'q' 退出):")
          if user_input == "q":
              print("退出循环")
              break  # 退出循环
          print(f"你输入的是:{user_input}")
  2. 循环控制:break 和 continue(控制循环执行)

    1. 说明breakcontinue 用于改变循环的默认执行流程,仅作用于当前所在的循环层。

    2. break:强制退出整个循环

      • 作用:一旦执行 break,立即退出当前循环(后续代码不再执行,循环终止)

      • 适用场景:找到目标后提前退出循环(优化效率)

        python 复制代码
        # 示例1:for 循环中用 break
        fruits = ["苹果", "香蕉", "橙子", "葡萄"]
        target = "橙子"
        for fruit in fruits:
            if fruit == target:
                print(f"找到目标水果:{target}")
                break  # 找到后立即退出循环,不再遍历后续元素
            print(f"当前遍历:{fruit}")
        # 输出:
        # 当前遍历:苹果
        # 当前遍历:香蕉
        # 找到目标水果:橙子
        
        # 示例2:while 循环中用 break
        num = 1
        while num <= 10:
            if num == 5:
                print(f"找到数字 5,退出循环")
                break
            print(f"当前数字:{num}")
            num += 1
        # 输出到 num=5 后退出
    3. continue:跳过当前次循环,继续下一次

      • 作用:执行 continue 后,跳过当前循环的剩余代码,直接进入下一次循环

      • 适用场景:需要跳过某些特定条件的循环

        python 复制代码
        # 示例1:for 循环中用 continue(跳过偶数)
        for num in range(1, 10):
            if num % 2 == 0:
                continue  # 跳过偶数,不执行后续 print
            print(f"奇数:{num}")  # 只输出奇数 1,3,5,7,9
        
        # 示例2:while 循环中用 continue(跳过能被 3 整除的数)
        num = 0
        while num < 10:
            num += 1  # 先递增(避免死循环)
            if num % 3 == 0:
                continue
            print(f"不被 3 整除的数:{num}")  # 输出 1,2,4,5,7,8,10
    4. 嵌套循环中的 break/continue(仅作用于当前循环)

      python 复制代码
      # 示例:嵌套 for 循环(break 只退出内层循环)
      for i in range(1, 4):  # 外层循环:1,2,3
          print(f"\n外层循环 i={i}")
          for j in range(1, 4):  # 内层循环:1,2,3
              if j == 2:
                  break  # 退出内层循环,外层循环继续
              print(f"内层循环 j={j}")
      # 输出:
      # 外层循环 i=1
      # 内层循环 j=1
      # 外层循环 i=2
      # 内层循环 j=1
      # 外层循环 i=3
      # 内层循环 j=1
      
      # 示例:嵌套 while 循环(continue 只跳过当前内层循环)
      i = 1
      while i <= 3:
          print(f"\n外层循环 i={i}")
          j = 1
          while j <= 3:
              j += 1
              if j == 2:
                  continue
              print(f"内层循环 j={j}")
          i += 1
    5. 循环 else 语句(循环正常结束时执行)

      • 语法

        bash 复制代码
        for 变量 in 可迭代对象:
            代码块
        else:
            else 代码块  # 循环正常结束(未被 break 中断)时执行
        
        while 条件:
            代码块
        else:
             else 代码块  # 条件为 False 时执行(未被 break 中断)
      • 注意:如果循环被 break 中断,else 代码块不会执行

        python 复制代码
        # 示例1:for 循环 else(正常结束)
        for num in range(1, 4):
            print(f"循环中:{num}")
        else:
            print("循环正常结束,执行 else 代码块")  # 会执行
        
        # 示例2:for 循环 else(被 break 中断)
        for num in range(1, 4):
            if num == 2:
                break
            print(f"循环中:{num}")
        else:
            print("循环正常结束")  # 不会执行(被 break 中断)
        
        # 示例3:while 循环 else(用于判断循环是否正常结束)
        num = 1
        while num <= 3:
            print(f"循环中:{num}")
            num += 1
        else:
            print("while 循环正常结束")  # 会执行

四、综合实战

  1. 用户登录验证(3 次重试机会)

    python 复制代码
    """
    功能:用户登录验证,支持 3 次重试
    技术点:while 循环、if-elif-else、input()、break、格式化输出
    """
    max_try = 3  # 最大重试次数
    try_count = 0  # 已尝试次数
    
    while try_count < max_try:
        # 获取用户输入
        username = input("请输入用户名:")
        password = input("请输入密码:")
        
        # 验证逻辑
        if username == "admin" and password == "123456":
            print(f"登录成功!欢迎你,{username}!")
            break  # 登录成功,退出循环
        else:
            try_count += 1
            remaining = max_try - try_count  # 剩余次数
            if remaining > 0:
                print(f"用户名或密码错误!剩余 {remaining} 次机会")
            else:
                print("3 次登录失败,账号已锁定,请 10 分钟后再试")
  2. 猜数字游戏(1-100 猜数字,提示大小)

    python 复制代码
    """
    功能:猜数字游戏,系统随机生成 1-100 的数字,用户猜,提示大小
    技术点:for 循环、if-elif-else、random 模块、格式化输出
    """
    import random
    
    # 系统生成 1-100 的随机数
    target = random.randint(1, 100)
    print("欢迎参加猜数字游戏!系统已生成 1-100 的随机数,你有 10 次机会")
    
    # 最多猜 10 次
    for guess_count in range(1, 11):
        try:
            guess = int(input(f"第 {guess_count} 次猜测,请输入数字:"))
            if guess < target:
                print("太小了!再试试更大的数字")
            elif guess > target:
                print("太大了!再试试更小的数字")
            else:
                # 猜对了,退出循环
                print(f"恭喜你!第 {guess_count} 次猜对了!数字是 {target}")
                break
        except ValueError:
            print("输入错误!请输入 1-100 之间的整数")
    else:
        # 10 次都没猜对
        print(f"游戏结束!你已用完 10 次机会,正确数字是 {target}")
  3. 简易计算器(支持加减乘除)

    python 复制代码
    """
    功能:简易计算器,支持加减乘除,循环计算直到用户退出
    技术点:while 循环、if-elif-else、input() 类型转换、异常处理
    """
    while True:
        print("\n===== 简易计算器 =====")
        print("支持操作:1.加法 2.减法 3.乘法 4.除法 5.退出")
        
        # 获取用户选择
        choice = input("请输入操作编号(1-5):")
        if choice == "5":
            print("感谢使用,再见!")
            break
        
        # 验证操作编号
        if choice not in ["1", "2", "3", "4"]:
            print("输入错误!请输入 1-5 之间的编号")
            continue
        
        # 获取两个数字
        try:
            num1 = float(input("请输入第一个数字:"))
            num2 = float(input("请输入第二个数字:"))
        except ValueError:
            print("输入错误!请输入数字")
            continue
        
        # 执行计算
        if choice == "1":
            result = num1 + num2
            print(f"{num1} + {num2} = {result}")
        elif choice == "2":
            result = num1 - num2
            print(f"{num1} - {num2} = {result}")
        elif choice == "3":
            result = num1 * num2
            print(f"{num1} × {num2} = {result}")
        elif choice == "4":
            if num2 == 0:
                print("错误!除数不能为 0")
            else:
                result = num1 / num2
                print(f"{num1} ÷ {num2} = {result:.2f}")

五、易错点总结

  1. input() 类型转换遗漏:忘记将输入转换为 int/float,导致算术运算报错
  2. 无限循环:while 循环中没有修改条件的代码,或条件永远为 True
  3. 缩进错误:循环 / 条件语句的代码块未缩进,或缩进不一致
  4. break/continue 作用范围:嵌套循环中,break 只退出当前层循环,不影响外层
  5. 格式化输出语法错误:f-string 遗漏 f 开头,format() 占位符与变量数量不匹配
  6. 循环 else 误解:认为 else 是 "循环不执行时执行",实际是 "循环正常结束时执行"
相关推荐
catchadmin2 小时前
PHP True Async RFC 被拒——原生异步离 PHP 还有多远?
开发语言·php
J***79392 小时前
PHP在电商中的Magento
开发语言·php
python零基础入门小白2 小时前
【万字长文】大模型应用开发:意图路由与查询重写设计模式(从入门到精通)
java·开发语言·设计模式·语言模型·架构·大模型应用开发·大模型学习
Eric.Lee20212 小时前
ubuntu 安装 Miniconda
linux·运维·python·ubuntu·miniconda
天若有情6732 小时前
【c++】手撸C++ Promise:从零实现通用异步回调组件,支持链式调用+异常安全
开发语言·前端·javascript·c++·promise
无心水2 小时前
【Python实战进阶】1、Python高手养成指南:四阶段突破法从入门到架构师
开发语言·python·django·matplotlib·gil·python实战进阶·python工程化实战进阶
李剑一3 小时前
Python学习笔记1
python
q***31833 小时前
Windows安装Rust环境(详细教程)
开发语言·windows·rust
合作小小程序员小小店3 小时前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全