1_4_流程控制#

作者: ZhouLong
创建日期: 2026 年 01 月 12 日
版本: 1.0

浏览量:

流程控制简介#

流程控制主要包括条件判断和循环。流程控制就像教程序做决策和重复工作,下面让我们一步步来探索。

1. 条件判断#

判断符号#

首先我们来了解下判断符号,判断符号和操作数共同构成条件(condition),条件的值只能为True或者False。换句话说,条件(condition) = 表达式 + 关系/逻辑运算,最终求值为布尔值(True/False)。

  1. 比较运算符

'''下述是操作数和符号构成的条件'''
# 等于
a == b  # 检查a是否等于b,注意是两个等号

# 不等于
a != b  # 检查a是否不等于b

# 大于
a > b   # 检查a是否大于b

# 小于
a < b   # 检查a是否小于b

# 大于等于
a >= b  # 检查a是否大于或等于b

# 小于等于
a <= b  # 检查a是否小于或等于b

  1. 逻辑运算符 条件(condition) = 表达式 + 关系/逻辑运算。

# and - 逻辑与(两个条件都为真时返回真)
condition1 = a==b #把a是否等于b赋值给condition1
condition2 = c==d 
condition1 and condition2 #等价于 (a==b) and (c==d),注意符号优先级

# or - 逻辑或(至少一个条件为真时返回真)
condition1 or condition2

# not - 逻辑非(取反)
not condition

# 括号 - 用于改变运算优先级
(condition1 or condition2) and condition3

运算符优先级-(优先级越往下越低)
括号 ()
比较运算符 >, <, >=, <=, ==, !=
not
and
or

1.1 if语句#

if语句:最简单的选择

# 如果下雨了,我就带伞
weather = "下雨"

if weather == "下雨":
    print("下雨了!我得带把伞出门")

print("我出发了!")

运行结果

>>>下雨了!我得带把伞出门
>>>我出发了!

1.2 if-else语句#

和if的区别是,如果if的条件不成立,则执行else下的代码。核心概念是二选一。

# 检查冰箱里是否有冰淇淋
ice_cream_in_fridge = False

if ice_cream_in_fridge:
    print("🍦 太好了!有冰淇淋吃!")
    print("我要吃巧克力味的!")
else:
    print("😢 没有冰淇淋...")
    print("只能吃点水果了")

print("吃完零食了!")

运行结果

>>>😢 没有冰淇淋...
>>>只能吃点水果了
>>>吃完零食了!

1.3 if-elif-else语句#

该语句可以判断条件具体符合多个要求中的哪一个。当多个elif语句的条件有重叠时,只会选择条件成立的第一个语句来执行。

# 根据时间决定做什么
hour = 14  # 下午2点

if hour < 7:
    print("😴 太早了,再睡一会儿...")
elif hour < 12:
    print("☀️ 早上好!该吃早餐了")
elif hour < 18:
    print("🌤️ 下午了,该学习Python了!")#条件符合,执行
elif hour < 22:
    print("🌙 晚上好,看会儿电视放松一下")#条件符合,但不执行
else:
    print("🌚 夜深了,该睡觉了")

print("继续享受这一天吧!")

运行结果

>>>🌤️ 下午了,该学习Python了!
>>>继续享受这一天吧!

1.4 嵌套if语句#

if中嵌套if,一定要注意编写代码时候,自己的逻辑要清晰。这是个容易写出逻辑Bug代码的点。

# 决定今天穿什么
is_weekend = True
temperature = 28  # 摄氏度

if is_weekend:
    print("🎉 今天是周末!")
    if temperature > 25:
        print("☀️ 天气很热,穿短袖和短裤吧")
    elif temperature > 20:
        print("⛅ 天气温暖,穿件T恤就好")
    else:
        print("🌧️ 天气有点凉,穿件外套吧")
else:
    print("📅 今天是工作日")
    print("👔 得穿正式一点去上班")

print("穿搭完成,准备出门!")

2. 循环#

2.1 for循环#

Python的for循环主要有以下特点:

  • 基于迭代器,遍历任何可迭代对象(列表、字符串、字典、文件等),不需要索引变量。

  • 一般迭代次数是固定的,次数取决于可迭代对象中包含的元素数量

  • 语法清晰,直接对集合元素进行操作。

for char in "Python":
    print(char)  # 逐字符输出

# 遍历购物清单
shopping_list = ["苹果", "香蕉", "牛奶", "面包", "鸡蛋"]

print("🛒 我的购物清单:")
for item in shopping_list:
    print(item)

print("买完所有东西啦!")

运行结果

>>>P
>>>y
>>>t
>>>h
>>>o
>>>n
>>>🛒 我的购物清单:
>>>苹果
>>>香蕉
>>>牛奶
>>>面包
>>>鸡蛋
>>>买完所有东西啦!

2.2 while循环#

Python的while循环主要有以下特点:

  • 基于条件判断:只要给定条件为True,就会重复执行循环体,直到条件变为False。

  • 适合未知次数的循环: 当循环次数不确定时使用(如等待用户输入、读取数据直到结束等)。

  • 需要手动控制循环变量:必须在循环体内更新条件相关变量,否则可能导致无限循环。

  • 可配合break和continue,用break提前退出循环,用continue跳过当前这一次迭代。

# 吃糖果直到吃完
candies = 5

print("我有一袋糖果,开始吃...")

while candies > 0:
    print(f"  还剩 {candies} 颗糖果")
    print("  啊呜!吃掉一颗")
    candies -= 1  # 每次减少一颗糖果
    
print("糖果吃完啦!不过要注意牙齿健康哦")

运行结果

>>>我有一袋糖果,开始吃...
>>>  还剩 5 颗糖果
>>>  啊呜!吃掉一颗
>>>  还剩 4 颗糖果
>>>  啊呜!吃掉一颗
>>>  还剩 3 颗糖果
>>>  啊呜!吃掉一颗
>>>  还剩 2 颗糖果
>>>  啊呜!吃掉一颗
>>>  还剩 1 颗糖果
>>>  啊呜!吃掉一颗
>>>糖果吃完啦!不过要注意牙齿健康哦

3. 循环控制语句#

这里用循环控制语句实现了一个和用户交互的例子。读者可以自己运行尝试

# 读取用户输入直到满足条件
print("\n=== 用户输入示例 ===")
total = 0
while True:
    user_input = input("请输入数字(输入'done'结束): ")
    if user_input.lower() == 'done':
        break
    try:
        total += float(user_input)
        print(f"当前总和: {total}")
    except ValueError:
        print("请输入有效数字!")
print(f"\n最终总和: {total}")

在for或者while循环中,都可以使用break 和 continue 。

print("\n=== break和continue示例 ===")
value = 0
print("循环开始:")
while value < 10:
    value += 1
    
    if value % 3 == 0:
        continue  # 跳过3的倍数
    
    if value == 8:
        break     # 当值为8时提前结束循环
    
    print(f"当前值: {value}")
print(f"循环结束,最终值: {value}")

运行结果

=== break和continue示例 ===
循环开始:
当前值: 1
当前值: 2
当前值: 4
当前值: 5
当前值: 7
循环结束,最终值: 8

4. 循环嵌套#

这里我们打印一个九九乘法表作为例子

print("✖️ 九九乘法表")
print("   ", end="")
for i in range(1, 10):  # 打印表头
    print(f"{i:4}", end="")
print("\n" + "=" * 40)

for row in range(1, 10):  # 外层循环:行
    print(f"{row}: ", end="")
    for col in range(1, 10):  # 内层循环:列
        print(f"{row*col:4}", end="")
    print()  # 换行

print("\n✅ 乘法表打印完成!")

运行结果

>>>✖️ 九九乘法表
>>>      1   2   3   4   5   6   7   8   9
>>>========================================
>>>1:    1   2   3   4   5   6   7   8   9
>>>2:    2   4   6   8  10  12  14  16  18
>>>3:    3   6   9  12  15  18  21  24  27
>>>4:    4   8  12  16  20  24  28  32  36
>>>5:    5  10  15  20  25  30  35  40  45
>>>6:    6  12  18  24  30  36  42  48  54
>>>7:    7  14  21  28  35  42  49  56  63
>>>8:    8  16  24  32  40  48  56  64  72
>>>9:    9  18  27  36  45  54  63  72  81
>>>
>>>✅ 乘法表打印完成!

常见陷阱#

陷阱1

# 陷阱1: 浮点数精度问题

num = 0.0
count = 0
while num != 1.0:  # ⚠️ 危险!浮点数比较,看似简单的循环,但永远不会结束!
    num += 0.1

正确做法:使用容差比较

num = 0.0
count = 0
tolerance = 1e-10  # 设置一个很小的容差
while abs(num - 1.0) > tolerance:
    num += 0.1
    count += 1
    print(f"第{count}次: {num}")

运行结果,可以发现小数不是严格等于理论值。在编程中,浮点数运算存在精度限制,因此小数计算的结果可能不完全等于理论值。这是由于二进制表示的限制,这一现象在几乎所有编程语言中都会出现。

第1次: 0.1
第2次: 0.2
第3次: 0.30000000000000004
第4次: 0.4
第5次: 0.5
第6次: 0.6
第7次: 0.7
第8次: 0.7999999999999999
第9次: 0.8999999999999999
第10次: 0.9999999999999999

陷阱2

# 陷阱2: 忘记更新循环变量(无限循环)
count = 0
while count < 3:
    print(f"计数: {count}")
    #count += 1  # 注释这行会导致无限循环

综合示例#

模拟一个简单的学生成绩分析系统,包含以下功能:

  • 输入多个学生的成绩

  • 分析成绩数据

  • 提供统计报告

读者可以阅读代码,理解运行过程。

# 学生成绩分析系统
print("=" * 40)
print("      学生成绩分析系统")
print("=" * 40)

# 1. 输入学生成绩
print("\n1. 输入学生成绩")
print("-" * 30)

scores = []  # 存储所有学生成绩
count = 0

while True:
    # 输入学生成绩
    score_input = input(f"请输入第{count + 1}个学生的成绩(0-100,输入'done'结束): ")
    
    # 检查是否结束输入
    if score_input.lower() == 'done':
        if len(scores) == 0:
            print("还没有输入任何成绩,请至少输入一个成绩")
            continue
        break
    
    # 验证输入是否为有效数字
    try:
        score = float(score_input)
        
        # 检查成绩是否在有效范围内
        if score < 0 or score > 100:
            print("成绩必须在0-100之间,请重新输入")
            continue
            
        scores.append(score)
        count += 1
        print(f"已添加第{count}个成绩: {score}")
        
    except ValueError:
        print("请输入有效的数字!")

# 2. 分析成绩数据
print("\n2. 分析成绩数据")
print("-" * 30)

if len(scores) > 0:
    # 初始化统计变量
    total = 0
    max_score = scores[0]
    min_score = scores[0]
    
    # 统计优秀、良好、及格、不及格人数
    excellent_count = 0  # 90-100
    good_count = 0       # 80-89
    pass_count = 0       # 60-79
    fail_count = 0       # 0-59
    
    # 使用for循环遍历所有成绩
    for score in scores:
        # 累加总分
        total += score
        
        # 更新最高分和最低分
        if score > max_score:
            max_score = score
        if score < min_score:
            min_score = score
        
        # 统计各分数段人数
        if score >= 90:
            excellent_count += 1
        elif score >= 80:
            good_count += 1
        elif score >= 60:
            pass_count += 1
        else:
            fail_count += 1
    
    # 计算平均分
    average = total / len(scores)
    
    # 基本统计信息
    print(f"总学生人数: {len(scores)}人")
    print(f"总分: {total:.1f}")
    print(f"平均分: {average:.2f}")
    print(f"最高分: {max_score}")
    print(f"最低分: {min_score}")