Python 流程控制之 while 循环
一、引言
在编程中,我们经常会遇到需要重复执行某段代码的情况。例如,我们要计算从 1 到 100 的整数之和,或者需要不断地从用户那里获取输入直到用户输入特定的指令。Python 中的 while
循环就是为解决这类问题而设计的一种流程控制结构。while
循环允许程序在满足特定条件的情况下,重复执行一段代码块,直到条件不再满足为止。本文将详细介绍 Python 中 while
循环的使用方法、原理以及一些常见的应用场景。
二、while 循环的基本语法
2.1 语法结构
while
循环的基本语法结构如下:
python
# 当条件为 True 时,执行循环体中的代码
while condition:
# 循环体,包含需要重复执行的代码
statement1
statement2
# 可以有更多的语句
这里的 condition
是一个布尔表达式,它会被计算出一个布尔值(True
或 False
)。如果 condition
的值为 True
,则会执行循环体中的代码;执行完循环体后,会再次检查 condition
的值,如果仍然为 True
,则继续执行循环体,如此反复,直到 condition
的值变为 False
,此时循环结束,程序继续执行循环后面的代码。
2.2 示例代码
下面是一个简单的 while
循环示例,用于打印从 1 到 5 的整数:
python
# 初始化一个变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 5 时,执行循环体
while i <= 5:
# 打印当前 i 的值
print(i)
# 将 i 的值加 1,以便下次循环时检查不同的条件
i = i + 1
在这个示例中,首先将变量 i
初始化为 1。然后进入 while
循环,检查 i <= 5
这个条件,由于此时 i
的值为 1,条件为 True
,所以会执行循环体中的代码,即打印 i
的值并将 i
的值加 1。接着再次检查条件,此时 i
的值为 2,条件仍然为 True
,继续执行循环体。这个过程会一直重复,直到 i
的值变为 6,此时 i <= 5
这个条件为 False
,循环结束。
三、while 循环的执行流程
3.1 详细步骤
while
循环的执行流程可以分为以下几个步骤:
- 条件判断 :程序首先会计算
while
后面的条件表达式的值。如果条件为True
,则进入步骤 2;如果条件为False
,则跳过循环体,直接执行循环后面的代码。 - 执行循环体 :如果条件为
True
,则会执行循环体中的代码。循环体可以包含一条或多条语句,这些语句会按照顺序依次执行。 - 再次条件判断 :循环体执行完毕后,程序会再次计算条件表达式的值。如果条件仍然为
True
,则回到步骤 2,继续执行循环体;如果条件变为False
,则循环结束,程序继续执行循环后面的代码。
3.2 流程图
plaintext
开始
|
|-- 计算条件表达式的值
| |-- 条件为 True
| | |-- 执行循环体
| | |-- 再次计算条件表达式的值
| | | |-- 条件为 True
| | | | |-- 回到执行循环体
| | | |-- 条件为 False
| | | |-- 循环结束,执行后续代码
| |-- 条件为 False
| |-- 循环结束,执行后续代码
结束
3.3 示例代码分析
python
# 初始化变量 num,用于存储当前数字
num = 0
# 当 num 小于 3 时,执行循环体
while num < 3:
# 打印当前 num 的值
print("当前数字是:", num)
# 将 num 的值加 1
num = num + 1
# 循环结束后,打印提示信息
print("循环结束")
在这个示例中,程序首先初始化变量 num
为 0。然后进入 while
循环,计算 num < 3
这个条件,由于 num
的值为 0,条件为 True
,所以执行循环体,打印当前 num
的值并将 num
的值加 1。接着再次计算条件,此时 num
的值为 1,条件仍然为 True
,继续执行循环体。当 num
的值变为 3 时,num < 3
这个条件为 False
,循环结束,程序执行循环后面的代码,打印"循环结束"。
四、while 循环的应用场景
4.1 计数循环
while
循环可以用于实现计数循环,即重复执行某段代码指定的次数。下面是一个计算 1 到 10 的整数之和的示例:
python
# 初始化变量 sum,用于存储累加的结果
sum = 0
# 初始化变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 10 时,执行循环体
while i <= 10:
# 将当前 i 的值累加到 sum 中
sum = sum + i
# 将 i 的值加 1
i = i + 1
# 打印累加的结果
print("1 到 10 的整数之和是:", sum)
在这个示例中,使用 while
循环从 1 到 10 进行计数,每次循环将当前的数字累加到 sum
中,最终得到 1 到 10 的整数之和。
4.2 用户输入验证
while
循环可以用于验证用户输入,直到用户输入符合要求的内容为止。下面是一个简单的示例,要求用户输入一个大于 0 的整数:
python
# 初始化变量 valid_input 为 False,表示输入尚未验证通过
valid_input = False
# 当 valid_input 为 False 时,执行循环体
while not valid_input:
try:
# 获取用户输入
num = int(input("请输入一个大于 0 的整数: "))
# 检查用户输入的数字是否大于 0
if num > 0:
# 如果大于 0,将 valid_input 设为 True,表示输入验证通过
valid_input = True
# 打印用户输入的数字
print("你输入的有效数字是:", num)
else:
# 如果小于等于 0,提示用户重新输入
print("输入无效,请输入一个大于 0 的整数。")
except ValueError:
# 如果用户输入的不是有效的整数,提示用户重新输入
print("输入无效,请输入一个有效的整数。")
在这个示例中,使用 while
循环不断获取用户输入,直到用户输入一个大于 0 的整数为止。如果用户输入的不是有效的整数或者输入的整数不大于 0,会提示用户重新输入。
4.3 模拟游戏循环
在游戏开发中,while
循环可以用于模拟游戏的主循环,不断更新游戏状态、处理用户输入和绘制游戏画面,直到游戏结束。下面是一个简单的猜数字游戏示例:
python
import random
# 生成一个 1 到 100 之间的随机整数
secret_number = random.randint(1, 100)
# 初始化变量 guess,用于存储用户的猜测
guess = 0
# 初始化变量 attempts,用于记录用户的猜测次数
attempts = 0
# 当用户的猜测不等于秘密数字时,执行循环体
while guess != secret_number:
try:
# 获取用户的猜测
guess = int(input("猜一个 1 到 100 之间的整数: "))
# 猜测次数加 1
attempts = attempts + 1
# 检查用户的猜测与秘密数字的大小关系
if guess < secret_number:
# 如果猜测的数字小于秘密数字,提示用户猜大一点
print("猜小了,再试一次。")
elif guess > secret_number:
# 如果猜测的数字大于秘密数字,提示用户猜小一点
print("猜大了,再试一次。")
except ValueError:
# 如果用户输入的不是有效的整数,提示用户重新输入
print("输入无效,请输入一个有效的整数。")
# 当用户猜对时,打印恭喜信息和猜测次数
print(f"恭喜你,猜对了!你一共用了 {attempts} 次尝试。")
在这个示例中,使用 while
循环不断获取用户的猜测,根据用户的猜测与秘密数字的大小关系给出提示,直到用户猜对为止。同时,记录用户的猜测次数,最后打印恭喜信息和猜测次数。
五、while 循环中的 break 和 continue 语句
5.1 break 语句
break
语句用于在循环体中提前终止循环,即使循环条件仍然为 True
。下面是一个示例,当找到第一个能被 5 整除的数字时,就终止循环:
python
# 初始化变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 10 时,执行循环体
while i <= 10:
# 检查 i 是否能被 5 整除
if i % 5 == 0:
# 如果能被 5 整除,打印当前数字并使用 break 语句终止循环
print("找到第一个能被 5 整除的数字:", i)
break
# 将 i 的值加 1
i = i + 1
# 循环结束后,打印提示信息
print("循环结束")
在这个示例中,当 i
的值为 5 时,i % 5 == 0
这个条件为 True
,执行 break
语句,循环立即终止,程序继续执行循环后面的代码,打印"循环结束"。
5.2 continue 语句
continue
语句用于跳过当前循环体中剩余的代码,直接进入下一次循环的条件判断。下面是一个示例,打印 1 到 10 之间不能被 3 整除的数字:
python
# 初始化变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 10 时,执行循环体
while i <= 10:
# 检查 i 是否能被 3 整除
if i % 3 == 0:
# 如果能被 3 整除,使用 continue 语句跳过当前循环体中剩余的代码,直接进入下一次循环
i = i + 1
continue
# 打印当前 i 的值
print(i)
# 将 i 的值加 1
i = i + 1
在这个示例中,当 i
的值能被 3 整除时,执行 continue
语句,跳过 print(i)
语句,直接进入下一次循环的条件判断。
六、while 循环与 else 子句
6.1 基本语法
在 Python 中,while
循环可以带有一个可选的 else
子句,其基本语法如下:
python
# 当条件为 True 时,执行循环体中的代码
while condition:
# 循环体,包含需要重复执行的代码
statement1
statement2
# 可以有更多的语句
else:
# 当循环正常结束(即不是通过 break 语句终止)时,执行这里的代码
statement3
statement4
# 可以有更多的语句
else
子句中的代码会在循环正常结束(即循环条件变为 False
)时执行,但如果循环是通过 break
语句终止的,则不会执行 else
子句中的代码。
6.2 示例代码
python
# 初始化变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 5 时,执行循环体
while i <= 5:
# 打印当前 i 的值
print(i)
# 将 i 的值加 1
i = i + 1
else:
# 当循环正常结束时,打印提示信息
print("循环正常结束")
在这个示例中,循环会正常结束,因为 i
的值会逐渐增加,直到 i <= 5
这个条件变为 False
。所以循环结束后,会执行 else
子句中的代码,打印"循环正常结束"。
下面是一个包含 break
语句的示例:
python
# 初始化变量 i,用于控制循环次数
i = 1
# 当 i 小于等于 5 时,执行循环体
while i <= 5:
# 检查 i 是否等于 3
if i == 3:
# 如果 i 等于 3,使用 break 语句终止循环
break
# 打印当前 i 的值
print(i)
# 将 i 的值加 1
i = i + 1
else:
# 由于循环是通过 break 语句终止的,所以不会执行这里的代码
print("循环正常结束")
在这个示例中,当 i
的值为 3 时,执行 break
语句,循环终止,不会执行 else
子句中的代码。
七、总结与展望
7.1 总结
Python 中的 while
循环是一种强大的流程控制结构,它允许程序在满足特定条件的情况下,重复执行一段代码块。通过合理使用 while
循环,我们可以实现计数循环、用户输入验证、模拟游戏循环等多种功能。同时,break
和 continue
语句可以让我们在循环体中灵活控制循环的执行流程,else
子句则为循环正常结束时提供了额外的执行代码的机会。
7.2 展望
在后续的 Python 学习中,while
循环将与其他的流程控制语句(如 if
判断语句、for
循环等)以及函数、类等结合使用,构建出更加复杂和强大的程序。例如,在处理文件读写、网络通信等任务时,while
循环可以用于不断读取数据或接收消息,直到满足特定的条件为止。随着对 Python 编程的深入学习,我们还会遇到更多复杂的应用场景,需要不断提升运用 while
循环的能力,以实现高效、准确的程序功能。