控制流程

Python 控制流程详解,包括条件语句、循环结构和流程控制

分类: basics 难度: 初级 更新: 2024-01-01
控制流程 条件语句 循环 if 语句 for 循环 while 循环

控制流程

📝 概述

控制流程是编程中的核心概念,它决定了程序代码的执行顺序。Python 提供了丰富的控制流程语句,包括条件语句(if、elif、else)、循环语句(for、while)以及流程控制语句(break、continue、pass)。掌握这些语句是编写逻辑清晰、功能完整程序的基础。

🎯 学习目标

  • 掌握条件语句的语法和使用方法
  • 学会使用 for 和 while 循环处理重复任务
  • 了解 break、continue、pass 等流程控制语句
  • 掌握条件表达式和循环推导式的使用
  • 能够编写复杂的控制流程逻辑

📋 前置知识

  • Python 基本语法和缩进规则
  • 变量和数据类型
  • 运算符和表达式
  • 布尔值和逻辑运算

🔍 详细内容

条件语句

if 语句

if 语句是最基本的条件控制语句,用于根据条件执行不同的代码块。

## 基本 if 语句
age = 18
if age >= 18:
    print("你已经成年了")

## 带 else 的 if 语句
score = 85
if score >= 60:
    print("考试通过")
else:
    print("考试不及格")

## 多条件判断
temperature = 25
if temperature > 30:
    print("天气很热")
elif temperature > 20:
    print("天气温暖")
elif temperature > 10:
    print("天气凉爽")
else:
    print("天气寒冷")

嵌套 if 语句

## 嵌套条件判断
username = "admin"
password = "123456"
is_active = True

if username == "admin":
    if password == "123456":
        if is_active:
            print("登录成功")
        else:
            print("账户已被禁用")
    else:
        print("密码错误")
else:
    print("用户名错误")

## 使用逻辑运算符简化嵌套
if username == "admin" and password == "123456" and is_active:
    print("登录成功")
else:
    print("登录失败")

条件表达式(三元运算符)

## 条件表达式的基本语法:值 1 if 条件 else 值 2
age = 20
status = "成年人" if age >= 18 else "未成年人"
print(f"你是{status}")

## 在函数调用中使用
def get_grade(score):
    return "及格" if score >= 60 else "不及格"

print(get_grade(75))  # 输出:及格
print(get_grade(45))  # 输出:不及格

## 嵌套条件表达式
score = 85
grade = "优秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格"
print(f"成绩等级:{grade}")

循环结构

for 循环

for 循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象。

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

## 遍历字符串
for char in "Python":
    print(char)

## 使用 range()函数
print("使用 range(5):")
for i in range(5):
    print(f"第{i+1}次循环")

print("\n 使用 range(1, 6):")
for i in range(1, 6):
    print(f"数字:{i}")

print("\n 使用 range(0, 10, 2):")
for i in range(0, 10, 2):
    print(f"偶数:{i}")

## 遍历字典
student = {"姓名": "张三", "年龄": 20, "专业": "计算机科学"}

print("遍历字典的键:")
for key in student:
    print(key)

print("\n 遍历字典的值:")
for value in student.values():
    print(value)

print("\n 遍历字典的键值对:")
for key, value in student.items():
    print(f"{key}: {value}")

enumerate()函数

## 获取索引和值
colors = ["红色", "绿色", "蓝色", "黄色"]

for index, color in enumerate(colors):
    print(f"索引{index}: {color}")

## 指定起始索引
for index, color in enumerate(colors, start=1):
    print(f"第{index}种颜色: {color}")

zip()函数

## 同时遍历多个序列
names = ["张三", "李四", "王五"]
ages = [20, 25, 30]
cities = ["北京", "上海", "广州"]

for name, age, city in zip(names, ages, cities):
    print(f"{name},{age}岁,来自{city}")

## 处理长度不同的序列
list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c']

for num, letter in zip(list1, list2):
    print(f"{num} - {letter}")

while 循环

while 循环在条件为真时重复执行代码块。

## 基本 while 循环
count = 0
while count < 5:
    print(f"计数:{count}")
    count += 1

## 用户输入验证
password = ""
while password != "123456":
    password = input("请输入密码:")
    if password != "123456":
        print("密码错误,请重新输入")
print("密码正确!")

## 无限循环(需要 break 退出)
while True:
    user_input = input("输入'quit'退出:")
    if user_input.lower() == 'quit':
        break
    print(f"你输入了:{user_input}")

## 计算阶乘
n = 5
factorial = 1
i = 1
while i <= n:
    factorial *= i
    i += 1
print(f"{n}的阶乘是:{factorial}")

循环控制语句

break 语句

break 用于立即退出循环。

## 在 for 循环中使用 break
for i in range(10):
    if i == 5:
        print("遇到 5,退出循环")
        break
    print(i)

## 在 while 循环中使用 break
count = 0
while True:
    if count >= 3:
        print("达到限制,退出循环")
        break
    print(f"计数:{count}")
    count += 1

## 在嵌套循环中使用 break
for i in range(3):
    print(f"外层循环:{i}")
    for j in range(5):
        if j == 2:
            print("  内层循环遇到 2,退出内层循环")
            break
        print(f"  内层循环:{j}")

continue 语句

continue 用于跳过当前循环的剩余部分,直接进入下一次循环。

## 跳过偶数
for i in range(10):
    if i % 2 == 0:
        continue
    print(f"奇数:{i}")

## 处理列表中的特殊值
numbers = [1, 2, -1, 4, -2, 6, 0, 8]
for num in numbers:
    if num <= 0:
        print(f"跳过非正数:{num}")
        continue
    print(f"处理正数:{num}")
    result = 100 / num
    print(f"100 / {num} = {result}")

pass 语句

pass 是一个空操作语句,用作占位符。

## 作为占位符
def future_function():
    pass  # 暂时不实现,避免语法错误

## 在条件语句中使用
age = 20
if age < 18:
    pass  # 暂时不处理未成年情况
else:
    print("可以投票")

## 在循环中使用
for i in range(5):
    if i == 2:
        pass  # 什么都不做,继续循环
    else:
        print(i)

## 在异常处理中使用
try:
    result = 10 / 0
except ZeroDivisionError:
    pass  # 忽略除零错误

else 子句

Python 的循环语句可以有 else 子句,当循环正常结束时执行。

## for 循环的 else 子句
for i in range(5):
    print(i)
else:
    print("循环正常结束")

## 带 break 的 for 循环
for i in range(5):
    if i == 3:
        print("遇到 3,退出循环")
        break
    print(i)
else:
    print("这行不会执行,因为循环被 break 中断")

## while 循环的 else 子句
count = 0
while count < 3:
    print(f"计数:{count}")
    count += 1
else:
    print("while 循环正常结束")

## 实际应用:查找元素
numbers = [1, 3, 5, 7, 9]
target = 6

for num in numbers:
    if num == target:
        print(f"找到了{target}")
        break
else:
    print(f"没有找到{target}")

💡 实际应用

基础用法

def grade_calculator():
    """成绩计算器"""
    while True:
        try:
            score = float(input("请输入成绩(0-100),输入-1 退出:"))
            
            if score == -1:
                print("程序结束")
                break
            
            if score < 0 or score > 100:
                print("成绩必须在 0-100 之间")
                continue
            
#            # 计算等级
            if score >= 90:
                grade = "A"
                comment = "优秀"
            elif score >= 80:
                grade = "B"
                comment = "良好"
            elif score >= 70:
                grade = "C"
                comment = "中等"
            elif score >= 60:
                grade = "D"
                comment = "及格"
            else:
                grade = "F"
                comment = "不及格"
            
            print(f"成绩:{score},等级:{grade},评价:{comment}")
            
        except ValueError:
            print("请输入有效的数字")

## 使用示例
## grade_calculator()

高级用法

def number_guessing_game():
    """数字猜测游戏"""
    import random
    
    print("欢迎来到数字猜测游戏!")
    
    while True:
#        # 生成随机数
        secret_number = random.randint(1, 100)
        attempts = 0
        max_attempts = 7
        
        print(f"\n 我想了一个 1 到 100 之间的数字,你有{max_attempts}次机会猜中它!")
        
        while attempts < max_attempts:
            try:
                guess = int(input(f"第{attempts + 1}次猜测,请输入你的猜测:"))
                attempts += 1
                
                if guess < 1 or guess > 100:
                    print("请输入 1 到 100 之间的数字")
                    continue
                
                if guess == secret_number:
                    print(f"🎉 恭喜你!猜对了!数字就是{secret_number}")
                    print(f"你用了{attempts}次就猜中了!")
                    break
                elif guess < secret_number:
                    print("太小了!")
                else:
                    print("太大了!")
                
#                # 给出提示
                remaining = max_attempts - attempts
                if remaining > 0:
                    print(f"还有{remaining}次机会")
                
            except ValueError:
                print("请输入有效的数字")
        else:
            print(f"😢 很遗憾,你没有猜中!正确答案是{secret_number}")
        
#        # 询问是否继续
        while True:
            play_again = input("\n 是否再玩一次?(y/n): ").lower()
            if play_again in ['y', 'yes', '是']:
                break
            elif play_again in ['n', 'no', '否']:
                print("谢谢游戏!再见!")
                return
            else:
                print("请输入 y 或 n")

## 使用示例
## number_guessing_game()

实际案例

class TaskManager:
    """任务管理器"""
    
    def __init__(self):
        self.tasks = []
        self.completed_tasks = []
    
    def add_task(self, task):
        """添加任务"""
        self.tasks.append({
            'id': len(self.tasks) + len(self.completed_tasks) + 1,
            'description': task,
            'completed': False
        })
        print(f"任务 '{task}' 已添加")
    
    def list_tasks(self):
        """列出所有任务"""
        if not self.tasks and not self.completed_tasks:
            print("没有任务")
            return
        
        print("\n=== 待完成任务 ===")
        if self.tasks:
            for task in self.tasks:
                print(f"{task['id']}. {task['description']}")
        else:
            print("无待完成任务")
        
        print("\n=== 已完成任务 ===")
        if self.completed_tasks:
            for task in self.completed_tasks:
                print(f"✓ {task['id']}. {task['description']}")
        else:
            print("无已完成任务")
    
    def complete_task(self, task_id):
        """完成任务"""
        for i, task in enumerate(self.tasks):
            if task['id'] == task_id:
                completed_task = self.tasks.pop(i)
                completed_task['completed'] = True
                self.completed_tasks.append(completed_task)
                print(f"任务 '{completed_task['description']}' 已完成")
                return
        print(f"未找到 ID 为{task_id}的任务")
    
    def delete_task(self, task_id):
        """删除任务"""
#        # 在待完成任务中查找
        for i, task in enumerate(self.tasks):
            if task['id'] == task_id:
                deleted_task = self.tasks.pop(i)
                print(f"任务 '{deleted_task['description']}' 已删除")
                return
        
#        # 在已完成任务中查找
        for i, task in enumerate(self.completed_tasks):
            if task['id'] == task_id:
                deleted_task = self.completed_tasks.pop(i)
                print(f"任务 '{deleted_task['description']}' 已删除")
                return
        
        print(f"未找到 ID 为{task_id}的任务")
    
    def run(self):
        """运行任务管理器"""
        print("欢迎使用任务管理器!")
        
        while True:
            print("\n=== 任务管理器 ===")
            print("1. 添加任务")
            print("2. 查看任务")
            print("3. 完成任务")
            print("4. 删除任务")
            print("5. 退出")
            
            choice = input("请选择操作(1-5):")
            
            if choice == '1':
                task = input("请输入任务描述:")
                if task.strip():
                    self.add_task(task.strip())
                else:
                    print("任务描述不能为空")
            
            elif choice == '2':
                self.list_tasks()
            
            elif choice == '3':
                self.list_tasks()
                if self.tasks:
                    try:
                        task_id = int(input("请输入要完成的任务 ID:"))
                        self.complete_task(task_id)
                    except ValueError:
                        print("请输入有效的任务 ID")
                else:
                    print("没有待完成的任务")
            
            elif choice == '4':
                self.list_tasks()
                if self.tasks or self.completed_tasks:
                    try:
                        task_id = int(input("请输入要删除的任务 ID:"))
                        self.delete_task(task_id)
                    except ValueError:
                        print("请输入有效的任务 ID")
                else:
                    print("没有任务可删除")
            
            elif choice == '5':
                print("谢谢使用!再见!")
                break
            
            else:
                print("无效选择,请输入 1-5")

## 使用示例
## task_manager = TaskManager()
## task_manager.run()

循环推导式

## 列表推导式
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

## 基本列表推导式
squares = [x**2 for x in numbers]
print(f"平方数:{squares}")

## 带条件的列表推导式
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(f"偶数的平方:{even_squares}")

## 复杂条件
filtered_numbers = [x for x in numbers if x > 3 and x < 8]
print(f"3 到 8 之间的数:{filtered_numbers}")

## 字符串处理
words = ["hello", "world", "python", "programming"]
uppercase_words = [word.upper() for word in words if len(word) > 5]
print(f"长度大于 5 的大写单词:{uppercase_words}")

## 嵌套循环推导式
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(f"展平的矩阵:{flattened}")

## 字典推导式
square_dict = {x: x**2 for x in range(1, 6)}
print(f"平方字典:{square_dict}")

## 集合推导式
unique_lengths = {len(word) for word in words}
print(f"单词长度集合:{unique_lengths}")

## 生成器表达式
square_generator = (x**2 for x in range(1, 6))
print(f"生成器对象:{square_generator}")
print(f"生成器内容:{list(square_generator)}")

⚠️ 注意事项

  • 缩进: Python 使用缩进来表示代码块,确保缩进一致
  • 无限循环: 使用 while True 时要确保有退出条件
  • 循环变量: 避免在循环内修改循环变量可能导致的问题
  • 性能: 大量数据时考虑使用生成器而不是列表推导式
  • 可读性: 复杂的嵌套条件可以考虑拆分为多个函数
  • 异常处理: 在循环中处理用户输入时要考虑异常情况

🔗 相关内容

📚 扩展阅读

🏷️ 标签

控制流程 条件语句 循环 if 语句 for 循环 while 循环 break continue pass


最后更新: 2024-01-01
作者: Python 文档团队
版本: 1.0

作者: Python 文档团队

版本: 1.0

讨论与反馈

欢迎在下方留言讨论,分享你的学习心得或提出问题。评论基于GitHub Issues,需要GitHub账号。