4.循环结构:让电脑做重复的事情

循环结构:让电脑做重复的事情

🎯 前言:你愿意数1000只羊吗?

想象一下,你的老板让你在一张纸上写1000遍"我不会再迟到了"。😱

作为一个正常人,你肯定会想:"这也太折磨人了吧!有没有什么办法让别人(比如电脑)帮我做这种重复的事情?"

恭喜你,你已经摸到了编程的精髓------让电脑做重复的苦力活

今天我们就来学习Python中的循环结构,让你的电脑变成一个不知疲倦的"复读机"。学完这篇文章,你就能:

  • 🔄 让电脑自动重复执行任务
  • 🎯 精确控制重复的次数和条件
  • 🚀 写出高效简洁的代码
  • 🎪 玩转各种循环的花式用法

📚 目录

  • 🔄 什么是循环?
  • 🔢 for循环:精确控制的重复专家
  • ⚡ while循环:条件驱动的永动机
  • 🎯 range函数:数字生成器
  • 🎪 循环的花式玩法
  • 🛑 循环控制:break和continue
  • 🔁 嵌套循环:循环中的循环
  • 💻 实战项目:打造你的专属工具
  • 🚀 进阶技巧
  • 🔧 常见问题与解决方案

🔄 什么是循环?

循环就像是给电脑安装了一个"自动重复"按钮。想象一下:

python 复制代码
# 不用循环的痛苦写法 😭
print("我不会再迟到了")
print("我不会再迟到了")
print("我不会再迟到了")
print("我不会再迟到了")
print("我不会再迟到了")
# ... 还有995行...

这样写,你的手指会先投降!

python 复制代码
# 使用循环的优雅写法 😎
for i in range(1000):
    print("我不会再迟到了")

看到了吗?1000行代码瞬间变成了2行!这就是循环的魅力。

🔢 for循环:精确控制的重复专家

for循环就像是一个精确的机器人,你告诉它要重复多少次,它就精确地执行多少次,绝不偷懒!

🎯 基本语法

python 复制代码
for 变量 in 序列:
    要重复执行的代码

这里的"变量"就像是一个计数器 ,"序列"就是任务清单

🌟 经典例子:数绵羊

python 复制代码
# 让电脑帮你数绵羊催眠
for i in range(1, 11):
    print(f"第{i}只绵羊:咩~ 😴")
    
# 输出:
# 第1只绵羊:咩~ 😴
# 第2只绵羊:咩~ 😴
# ...
# 第10只绵羊:咩~ 😴

🎪 遍历列表:给朋友们群发消息

python 复制代码
# 朋友列表
friends = ["小明", "小红", "小华", "小李"]

# 给每个朋友发个性化消息
for friend in friends:
    print(f"嗨,{friend}!周末一起去吃火锅吧!🔥")

# 输出:
# 嗨,小明!周末一起去吃火锅吧!🔥
# 嗨,小红!周末一起去吃火锅吧!🔥
# 嗨,小华!周末一起去吃火锅吧!🔥
# 嗨,小李!周末一起去吃火锅吧!🔥

🎵 遍历字符串:逐个字符分析

python 复制代码
# 分析你的名字
name = "Python"
for char in name:
    print(f"字母 '{char}' 的ASCII码是:{ord(char)}")

# 输出:
# 字母 'P' 的ASCII码是:80
# 字母 'y' 的ASCII码是:121
# 字母 't' 的ASCII码是:116
# 字母 'h' 的ASCII码是:104
# 字母 'o' 的ASCII码是:111
# 字母 'n' 的ASCII码是:110

⚡ while循环:条件驱动的永动机

while循环就像是一个条件驱动的机器人 ,只要条件满足,它就会一直工作下去。这家伙可能会永远不停 ,也可能一次都不执行

🎯 基本语法

python 复制代码
while 条件:
    要重复执行的代码

🎲 经典例子:猜数字游戏

python 复制代码
import random

# 电脑随机想一个1-100的数字
secret_number = random.randint(1, 100)
guess = 0

print("我想了一个1-100的数字,你来猜猜看!")

while guess != secret_number:
    guess = int(input("请输入你的猜测:"))
    
    if guess < secret_number:
        print("太小了!再试试 📈")
    elif guess > secret_number:
        print("太大了!再试试 📉")
    else:
        print("恭喜你猜对了!🎉")
        break

print(f"答案是:{secret_number}")

💰 实用例子:存钱买iPhone

python 复制代码
# 存钱计划
target = 8000  # 目标金额
current_money = 0  # 当前存款
month = 0

print("开始存钱买iPhone!目标:8000元")

while current_money < target:
    month += 1
    monthly_saving = 800  # 每月存800元
    current_money += monthly_saving
    
    print(f"第{month}个月:存了{monthly_saving}元,总共{current_money}元")
    
    if current_money >= target:
        print(f"🎉 恭喜!{month}个月后成功存够钱买iPhone!")

🎯 range函数:数字生成器

range函数就像是一个数字生成器,专门为for循环提供数字序列。

🔢 三种用法

python 复制代码
# 1. range(停止值) - 从0开始
for i in range(5):
    print(i)  # 输出:0, 1, 2, 3, 4

# 2. range(开始值, 停止值) - 指定开始
for i in range(2, 8):
    print(i)  # 输出:2, 3, 4, 5, 6, 7

# 3. range(开始值, 停止值, 步长) - 指定步长
for i in range(0, 10, 2):
    print(i)  # 输出:0, 2, 4, 6, 8

🎪 倒计时效果

python 复制代码
print("新年倒计时开始!")
for i in range(10, 0, -1):
    print(f"{i}...")
    # 实际使用时可以加上 time.sleep(1) 暂停1秒
print("🎉 新年快乐!")

🎪 循环的花式玩法

🌟 enumerate:带序号的循环

python 复制代码
# 购物清单
shopping_list = ["苹果", "香蕉", "橙子", "葡萄"]

# 带序号输出
for index, item in enumerate(shopping_list, 1):
    print(f"{index}. {item}")

# 输出:
# 1. 苹果
# 2. 香蕉
# 3. 橙子
# 4. 葡萄

🎯 zip:双重循环

python 复制代码
# 学生和成绩
students = ["小明", "小红", "小华"]
scores = [85, 92, 78]

# 配对输出
for student, score in zip(students, scores):
    print(f"{student}的成绩是:{score}分")

# 输出:
# 小明的成绩是:85分
# 小红的成绩是:92分
# 小华的成绩是:78分

🎨 列表推导式:高级玩法

python 复制代码
# 传统写法
squares = []
for i in range(1, 6):
    squares.append(i ** 2)

# 列表推导式:一行搞定
squares = [i ** 2 for i in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]

# 带条件的列表推导式
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

🛑 循环控制:break和continue

🚫 break:紧急刹车

python 复制代码
# 找到第一个能被7整除的数
for i in range(1, 100):
    if i % 7 == 0:
        print(f"找到了!第一个能被7整除的数是:{i}")
        break  # 立即停止循环
    print(f"检查数字:{i}")

⏭️ continue:跳过这次

python 复制代码
# 打印1-10中的奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue  # 跳过偶数
    print(f"奇数:{i}")

🎯 综合例子:VIP用户识别

python 复制代码
users = ["张三", "VIP李四", "王五", "VIP赵六", "钱七"]

print("正在检查用户列表...")
for user in users:
    if user.startswith("VIP"):
        print(f"🌟 发现VIP用户:{user}")
        continue  # 跳过后续处理,检查下一个用户
    
    if user == "钱七":
        print("⚠️ 发现问题用户,停止检查")
        break
    
    print(f"📝 普通用户:{user}")

🔁 嵌套循环:循环中的循环

嵌套循环就像是俄罗斯套娃,一个循环里面还有一个循环!

🎯 打印乘法表

python 复制代码
print("九九乘法表:")
for i in range(1, 10):
    for j in range(1, i + 1):
        result = i * j
        print(f"{j}×{i}={result}", end="  ")
    print()  # 换行

🎪 绘制图案

python 复制代码
# 打印心形图案
print("用*号绘制心形:")
for i in range(6):
    for j in range(7):
        if (i == 0 and j % 3 != 0) or (i == 1 and j % 3 == 0) or (i - j == 2) or (i + j == 8):
            print("*", end="")
        else:
            print(" ", end="")
    print()

💻 实战项目:打造你的专属工具

🎯 项目1:密码强度检测器

python 复制代码
def check_password_strength(password):
    """检测密码强度"""
    score = 0
    feedback = []
    
    # 检查长度
    if len(password) >= 8:
        score += 1
    else:
        feedback.append("密码长度至少8位")
    
    # 检查各种字符类型
    has_lower = False
    has_upper = False
    has_digit = False
    has_special = False
    
    for char in password:
        if char.islower():
            has_lower = True
        elif char.isupper():
            has_upper = True
        elif char.isdigit():
            has_digit = True
        elif char in "!@#$%^&*()":
            has_special = True
    
    if has_lower:
        score += 1
    else:
        feedback.append("需要小写字母")
    
    if has_upper:
        score += 1
    else:
        feedback.append("需要大写字母")
    
    if has_digit:
        score += 1
    else:
        feedback.append("需要数字")
    
    if has_special:
        score += 1
    else:
        feedback.append("需要特殊符号")
    
    # 评级
    if score >= 4:
        strength = "强 💪"
    elif score >= 3:
        strength = "中等 👍"
    else:
        strength = "弱 ⚠️"
    
    return strength, feedback

# 测试密码
test_passwords = ["123456", "Password123", "P@ssw0rd!", "abc"]

for pwd in test_passwords:
    strength, tips = check_password_strength(pwd)
    print(f"密码'{pwd}'强度:{strength}")
    if tips:
        print(f"建议:{', '.join(tips)}")
    print("-" * 30)

🎯 项目2:个人记账本

python 复制代码
class MoneyTracker:
    def __init__(self):
        self.records = []
    
    def add_record(self, amount, description, category="其他"):
        """添加记录"""
        record = {
            "amount": amount,
            "description": description,
            "category": category
        }
        self.records.append(record)
        print(f"✅ 记录添加成功:{description} {amount}元")
    
    def show_summary(self):
        """显示统计摘要"""
        if not self.records:
            print("还没有任何记录哦!")
            return
        
        total_income = 0
        total_expense = 0
        
        print("\n💰 收支明细:")
        print("-" * 40)
        
        for i, record in enumerate(self.records, 1):
            amount = record["amount"]
            desc = record["description"]
            category = record["category"]
            
            if amount > 0:
                total_income += amount
                print(f"{i}. 收入:+{amount}元 ({desc}) [{category}]")
            else:
                total_expense += abs(amount)
                print(f"{i}. 支出:{amount}元 ({desc}) [{category}]")
        
        print("-" * 40)
        print(f"总收入:+{total_income}元")
        print(f"总支出:-{total_expense}元")
        print(f"余额:{total_income - total_expense}元")
    
    def show_by_category(self):
        """按分类显示"""
        if not self.records:
            print("还没有任何记录哦!")
            return
        
        categories = {}
        for record in self.records:
            category = record["category"]
            amount = record["amount"]
            
            if category not in categories:
                categories[category] = 0
            categories[category] += amount
        
        print("\n📊 分类统计:")
        print("-" * 30)
        for category, total in categories.items():
            status = "收入" if total > 0 else "支出"
            print(f"{category}:{total}元 ({status})")

# 使用示例
tracker = MoneyTracker()

# 添加一些记录
tracker.add_record(5000, "工资", "收入")
tracker.add_record(-500, "房租", "住房")
tracker.add_record(-200, "吃饭", "餐饮")
tracker.add_record(-100, "交通", "出行")
tracker.add_record(200, "兼职", "收入")

# 显示统计
tracker.show_summary()
tracker.show_by_category()

🚀 进阶技巧

🎯 生成器表达式:内存友好

python 复制代码
# 列表推导式:占用内存
squares_list = [i ** 2 for i in range(1000000)]

# 生成器表达式:节省内存
squares_gen = (i ** 2 for i in range(1000000))

# 逐个使用,不占用大量内存
for square in squares_gen:
    if square > 100:
        print(f"找到第一个大于100的平方数:{square}")
        break

🎪 itertools:循环工具箱

python 复制代码
import itertools

# 无限循环
colors = ["红", "黄", "蓝"]
color_cycle = itertools.cycle(colors)

# 输出前10个颜色
for i, color in enumerate(color_cycle):
    if i >= 10:
        break
    print(f"第{i+1}个颜色:{color}")

# 排列组合
numbers = [1, 2, 3]
print("所有排列:")
for perm in itertools.permutations(numbers):
    print(perm)

print("所有组合:")
for combo in itertools.combinations(numbers, 2):
    print(combo)

🎯 性能优化技巧

python 复制代码
# 慢速版本:频繁字符串拼接
def slow_join(items):
    result = ""
    for item in items:
        result += str(item) + " "
    return result

# 快速版本:使用列表和join
def fast_join(items):
    parts = []
    for item in items:
        parts.append(str(item))
    return " ".join(parts)

# 最快版本:生成器表达式
def fastest_join(items):
    return " ".join(str(item) for item in items)

# 测试性能
import time

data = range(10000)

# 测试各种方法的速度
start = time.time()
result1 = slow_join(data)
print(f"慢速版本耗时:{time.time() - start:.4f}秒")

start = time.time()
result2 = fast_join(data)
print(f"快速版本耗时:{time.time() - start:.4f}秒")

start = time.time()
result3 = fastest_join(data)
print(f"最快版本耗时:{time.time() - start:.4f}秒")

🔧 常见问题与解决方案

❓ 问题1:无限循环怎么办?

症状:程序一直运行,停不下来

python 复制代码
# 错误示例:忘记更新条件
count = 0
while count < 10:
    print(count)
    # 忘记了 count += 1,导致无限循环!

解决方案

python 复制代码
# 正确做法:确保条件会改变
count = 0
while count < 10:
    print(count)
    count += 1  # 记得更新条件!

❓ 问题2:range的边界问题

症状:总是少一个或多一个

python 复制代码
# 想要1-10,但这样只能得到1-9
for i in range(1, 10):
    print(i)

解决方案

python 复制代码
# 记住:range是"左闭右开"区间
for i in range(1, 11):  # 要11才能到10
    print(i)

❓ 问题3:修改循环中的列表

症状:循环中修改列表导致奇怪行为

python 复制代码
# 错误示例:边循环边删除
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)  # 危险!

解决方案

python 复制代码
# 方法1:倒序循环
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers) - 1, -1, -1):
    if numbers[i] % 2 == 0:
        numbers.pop(i)

# 方法2:使用列表推导式
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]

❓ 问题4:嵌套循环的性能问题

症状:程序运行很慢

python 复制代码
# 低效的嵌套循环
def find_duplicates_slow(list1, list2):
    duplicates = []
    for item1 in list1:
        for item2 in list2:
            if item1 == item2:
                duplicates.append(item1)
    return duplicates

解决方案

python 复制代码
# 使用集合优化
def find_duplicates_fast(list1, list2):
    set2 = set(list2)  # 先转换为集合
    duplicates = []
    for item1 in list1:
        if item1 in set2:  # 集合查找是O(1)
            duplicates.append(item1)
    return duplicates

# 更简洁的版本
def find_duplicates_elegant(list1, list2):
    return list(set(list1) & set(list2))

📖 扩展阅读

📚 推荐资源

🛠️ 实用工具

  • itertools模块:提供各种循环工具
  • collections模块:高性能数据结构
  • time模块:性能测试和延时

🎯 练习项目建议

  1. 文本统计器:统计文本中各个字符的出现频率
  2. 数独验证器:验证数独解答是否正确
  3. 简单爬虫:爬取网页上的特定信息
  4. 文件批处理:批量重命名或处理文件

🎬 下集预告

学会了循环,你已经掌握了让电脑自动化工作的核心技能!但是,当你的代码越来越复杂时,你会发现需要把一些重复的操作打包起来,方便重复使用。

下一篇文章,我们将学习**《函数:把代码打包成工具箱》**,你将学会:

  • 🧰 如何创建自己的函数工具箱
  • 📦 参数和返回值的奥秘
  • 🔄 函数的高级用法和装饰器
  • 🎯 设计优雅的函数接口

想象一下,你不再需要写重复的代码,所有常用的功能都被你打包成了方便的工具,一调用就能用!这是不是很酷?

📝 总结与思考题

🎯 本章重点回顾

  1. for循环:适合已知次数的重复操作
  2. while循环:适合条件驱动的重复操作
  3. range函数:生成数字序列的好帮手
  4. 循环控制:break和continue让循环更灵活
  5. 嵌套循环:处理二维数据的利器
  6. 性能优化:选择合适的数据结构很重要

🤔 思考题

  1. 基础练习

    • 用for循环计算1到100的所有偶数之和
    • 用while循环实现用户输入验证(直到输入正确为止)
    • 用嵌套循环打印一个5×5的星号矩阵
  2. 进阶挑战

    • 实现一个简单的猜词游戏(类似Wordle)
    • 编写一个素数生成器,找出1000以内的所有素数
    • 创建一个文本分析器,统计文章中最常用的10个词
  3. 实际应用

    • 你在日常生活中有哪些重复性的工作可以用循环来自动化?
    • 如何设计一个高效的算法来处理大量数据?
    • 在什么情况下应该选择for循环,什么情况下选择while循环?

🎯 实践作业

作业1:个人日程管理器

创建一个简单的日程管理器,能够:

  • 添加日程安排
  • 显示当天的所有安排
  • 按时间顺序排列
  • 标记已完成的任务

作业2:数字游戏集合

实现以下三个小游戏:

  • 猜数字游戏(已给出基础版本)
  • 石头剪刀布游戏
  • 简单的数学计算练习

作业3:文件处理工具

编写一个工具,能够:

  • 批量重命名文件
  • 统计文件夹中各类型文件的数量
  • 查找包含特定关键词的文件

🎉 恭喜你! 你已经掌握了让电脑自动化工作的核心技能!现在你可以让程序自动处理重复的任务,大大提高工作效率。

记住,好的程序员不是写代码最多的人,而是能让电脑替自己干活的人!💪

下次见面时,我们将学习如何把这些自动化的代码打包成可重用的函数工具箱!🧰

相关推荐
智慧源点2 分钟前
基于Milvus Lite的轻量级向量数据库实战指南
人工智能
炒茄子3 分钟前
GEE:批量处理和下载指定时间段的MODIS-GPP产品(MOD17A3HGF)
python
吾鳴7 分钟前
扣子(Coze)实战:一键Excel表格数据转成可视化图表
人工智能·excel·coze
婪苏7 分钟前
Python 异常机制详解:从 Error 类型到 raise 与 assert 的对比
后端·python
DAWN_T1714 分钟前
神经网络——卷积层
人工智能·pytorch·深度学习·神经网络·机器学习·计算机视觉·cnn
别在内卷了19 分钟前
测试学习之——Pytest Day3
python·学习·pytest
MediaTea25 分钟前
Python:简易的 TCP + SSL 服务端与客户端示例
开发语言·python·网络协议·tcp/ip·ssl
墨尘游子40 分钟前
3-大语言模型—理论基础:生成式预训练语言模型GPT(代码“活起来”)
人工智能·python·gpt·深度学习·神经网络·语言模型·自然语言处理
Cedric111343 分钟前
深度解析 YOLOv8 图像处理速度优化
图像处理·人工智能·yolo
Code_流苏1 小时前
GEO营销:AI时代的搜索优化新赛道——从DeepSeek爆火看生成式引擎优化的崛起
人工智能·seo·geo·搜索引擎优化·生成式引擎优化