1. Python循环结构基础入门

第一次接触Python循环时,我盯着那个 for i in range(5) 看了半天——这玩意儿怎么就能重复干活呢?后来才明白,循环就是让计算机"笨笨地"重复执行某些操作,直到我们喊停。Python主要提供两种循环结构: while for ,它们就像工厂里的两种流水线,各有各的适用场景。

while循环 像个固执的质检员,只要条件满足就持续工作。它的基本结构长这样:

while 条件表达式:
    循环体代码

比如下面这个零件计数器的例子,当已加工数量小于订单量时,机器就不停运转:

part_count = 10  # 订单总量
processed = 0    # 已加工数量

while processed < part_count:
    processed += 1
    print(f"正在加工第{processed}个零件")

for循环 则像个有条理的仓库管理员,专门处理已知数量的任务。典型结构如下:

for 变量 in 可迭代对象:
    循环体代码

比如统计班级学生成绩时,我们明确知道要遍历所有学生:

students = ["张三", "李四", "王五"]
for student in students:
    print(f"正在处理{student}的成绩")

这两种循环最直观的区别在于:while关注"做到什么时候停",for关注"要做多少件事"。实际项目中,我习惯用for处理已知长度的任务(如列表处理),用while处理不确定次数的操作(如读取文件直到结束)。

2. 循环控制语句实战技巧

break和continue这两个小家伙,简直就是循环里的交通警察。break负责全线封路,continue则是临时管制。刚开始我老记混它俩的区别,直到有次写了个学生点名程序才彻底明白。

break语句 会直接结束整个循环。想象上课时突然火警铃响:

absent_num = 2  # 允许缺席人数
count = 0

for student in ["张三", "李四", "王五"]:
    if count == absent_num:
        print("缺席人数已达上限,停止点名!")
        break
    if student not in classroom:
        count += 1
        print(f"{student}缺席")

continue语句 则跳过当前这次循环。比如改试卷时遇到没交作业的学生:

for student in student_list:
    if not student.hand_in_homework:
        print(f"{student.name}没交作业,跳过")
        continue
    grade = check_homework(student)
    student.record_grade(grade)

在零件加工的案例中,如果突然停电(electric为True),就需要立即停止生产:

while processed < part_count:
    if electric:  # 停电检测
        print("紧急停止!")
        break
    processed += 1

我踩过的坑是:在多层嵌套循环中,break只能跳出当前层循环。有次写游戏逻辑时,以为break能直接结束所有循环,结果闹出大笑话。后来发现可以用标志变量或者异常处理来解决这个问题。

3. 循环结构进阶应用

当基础循环玩熟练后,就该试试组合技了——比如 循环嵌套 。这就像俄罗斯套娃,一层循环里面再套一层。最常见的场景就是处理多维数据,比如学生成绩系统:

students = ["张三", "李四"]
subjects = ["数学", "英语", "物理"]

for student in students:
    total = 0
    for subject in subjects:
        score = get_score(student, subject)
        total += score
        print(f"{student}的{subject}成绩:{score}")
    print(f"{student}总分:{total}\n")

迭代器 是另一个提升效率的利器。相比直接遍历列表,迭代器更省内存。比如处理大型日志文件时:

log_lines = iter(open('server.log'))  # 创建迭代器
while True:
    try:
        line = next(log_lines)
        if "ERROR" in line:
            alert_admin(line)
    except StopIteration:
        break

在数据分析时,我特别喜欢用 列表推导式 这种语法糖:

# 传统方式
squares = []
for x in range(10):
    squares.append(x**2)

# 列表推导式
squares = [x**2 for x in range(10)]

推导式还能加入条件判断,比如只要偶数的平方:

even_squares = [x**2 for x in range(10) if x % 2 == 0]

4. 典型场景案例解析

场景一:自动化零件加工

def auto_produce(target_count):
    current = 0
    while current < target_count:
        if check_power_failure():  # 电力检测
            log_error("电力中断")
            break
        if not check_material():   # 原料检测
            log_warning("原料不足")
            continue
        produce_part()
        current += 1
        print(f"进度:{current}/{target_count}")
    else:  # 循环正常结束执行
        send_report("生产完成")

场景二:学生成绩统计分析

def analyze_grades(students):
    results = {}
    for name, scores in students.items():
        total = 0
        valid_subjects = 0
        for subject, score in scores.items():
            if score is None:  # 缺考处理
                continue
            total += score
            valid_subjects += 1
        avg = total / valid_subjects if valid_subjects else 0
        results[name] = avg
        print(f"{name}平均分:{avg:.1f}")
    return results

场景三:数据清洗与转换

def clean_data(raw_data):
    cleaned = []
    for record in raw_data:
        try:
            # 跳过无效记录
            if not record or record[0] == "#":
                continue
                
            # 数据转换
            processed = {
                'id': int(record[0]),
                'value': float(record[1]),
                'timestamp': parse_time(record[2])
            }
            cleaned.append(processed)
        except ValueError as e:
            log_error(f"数据格式错误:{record}")
    return cleaned

在这些实际案例中,循环结构的灵活运用能大幅提升代码效率。特别是在处理边界条件时(如中途中断、数据异常等),合理的循环控制能让程序更健壮。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐