1_4_流程控制#
作者: ZhouLong
创建日期: 2026 年 01 月 12 日
版本: 1.0
浏览量:
流程控制简介#
流程控制主要包括条件判断和循环。流程控制就像教程序做决策和重复工作,下面让我们一步步来探索。
1. 条件判断#
判断符号#
首先我们来了解下判断符号,判断符号和操作数共同构成条件(condition),条件的值只能为True或者False。换句话说,条件(condition) = 表达式 + 关系/逻辑运算,最终求值为布尔值(True/False)。
比较运算符
'''下述是操作数和符号构成的条件'''
# 等于
a == b # 检查a是否等于b,注意是两个等号
# 不等于
a != b # 检查a是否不等于b
# 大于
a > b # 检查a是否大于b
# 小于
a < b # 检查a是否小于b
# 大于等于
a >= b # 检查a是否大于或等于b
# 小于等于
a <= b # 检查a是否小于或等于b
逻辑运算符 条件(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}")