
Python学习日志07-基础语法学习06

for循环语句
在Python中,for循环语句是一种十分重要的程序结构。其特点是,在给定条件成立时,反复执行某段代码,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。
for循环的基本结构如下:
1 | for iterating_var in sequence: |
上述语法中各参数解释如下:
- iterating_var:表示循环变量
- sequence:表示遍历对象,通常是元组、字典和列表等
- statements:表示for语句中的循环体,他的执行次数就是遍历对象中值的数量
for循环的逻辑关系如下
stateDiagram direction TB [*] --> s1 s1 --> s2 s2 --> s3 s3 --> s4 s4 --> s1:返回到输入开始下一轮 s3 --> s5 s5 --> s6 s6 --> [*] s1:输入 s2:算法 s3:判断是否符合范围 s4:符合 s5:不符合 s6:结束循环,输出最终结果
比如我们以简单的一个倒计时来说,此时的要求有以下几点:
- 允许用户输入一个数字,表示倒计时的时长;比如输入300,则表示倒计时300秒。
- 倒计时的时长以秒为单位,每秒输出一次倒计时的剩余时间。
- 当倒计时结束后,输出“倒计时结束”,并且发出铃声。
1 | import time # 导入时间模块,用于控制程序暂停 |
简单的运行效果如下,当结束时,就会发出“哔~~”的声音。下面的这个是gif,没有声音,想要试试的同学可以复制上面的代码,然后运行一下。
其中最重要的便是countdown函数,然后利用for循环定义一个变量remaining,从你输入的数字开始,每秒减一,一直到0,然后发出声音,然后关闭程序。详细的每部分说明如下:
导入模块:
import time
: 导入time
模块,用于控制程序暂停。import winsound
: 导入winsound
模块,用于播放声音。
定义
countdown
函数:def countdown(t)
: 定义一个名为countdown
的函数,接受一个参数t
,表示倒计时的总秒数。for remaining in range(t, 0, -1)
: 使用for
循环从t
到1
进行倒计时。range(t, 0, -1)
生成一个从t
到1
的递减序列。mins, secs = divmod(remaining, 60)
: 使用divmod
函数计算剩余时间的分钟数和秒数。divmod(a, b)
返回一个元组(a // b, a % b)
,即商和余数。timer = '{:02d}:{:02d}'.format(mins, secs)
: 使用字符串格式化方法将剩余时间格式化为MM:SS
的形式。'{:02d}'
表示至少两位数字,不足两位时前面补零。print(timer, end="\r")
: 在控制台上打印当前时间,使用\r
回车符将光标移回到行首,这样每次打印都会覆盖前一次的输出。time.sleep(1)
: 暂停程序执行 1 秒钟,模拟每秒的倒计时。
倒计时结束:
print('倒计时结束')
: 当循环结束后,倒计时已经完成,在控制台上打印倒计时结束的消息。winsound.Beep(1000, 1000)
: 播放提示音,频率为 1000 Hz,持续时间为 1000 毫秒(1 秒)。
主程序入口:
if __name__ == "__main__"
: 检查当前模块是否是主程序入口。如果是,则执行下面的代码。t = int(input("请输入倒计时时长(秒):"))
: 提示用户输入倒计时时长,并将输入的字符串转换为整数。countdown(t)
: 调用countdown
函数,开始倒计时。
此时的这个程序逻辑如下:
流程图详细说明
stateDiagram direction TB [*] --> s7 s7 --> s8 s8 --> s9 s8 --> s10 s9 --> s1 s1 --> s11 s11 --> s12 s12 --> s13 s13 --> s14 s14 --> s15 s15 --> s16 s16 --> s17 s16 --> s18 s18 --> s20 s17 --> s19 s20 --> s22 s19 --> s21 s21 --> s23 s23 --> s24 s24 --> s25 s26 --> s27 s24 --> s26 s7:导入音频和倒计时模块 s8:检查当前程序是否为主程序入口 s9:是,开始运行 s10:否,退出 s1:提示用户输入倒计时时长 s11:读取用户输入并转换成整数类型 s12:调用countdown函数 s13:进入函数 s14:初始化t为用户输入的值 s15:初始化 t 为用户输入的值 s16:for 循环开始 (从 t 到 1) s17:计算分钟数和秒数 s18:t 已经为 0 s20:打印“倒计时结束” s19:格式化时间为MM:SS s22:播放提示音 s21:打印时间到控制台 s23:暂停程序执行 1 秒钟 s24:减少 t 的值 (t = t - 1) s25:返回 for 循环顶部 s26:跳出循环 s27:结束
开始:
- 程序启动。
导入模块:
- 导入
time
和winsound
模块,用于控制程序暂停和播放声音。
- 导入
检查主程序入口:
- 使用
if __name__ == "__main__":
检查当前模块是否是主程序入口。 - 如果是,继续执行;否则,程序结束。
- 使用
提示用户输入倒计时时长:
- 提示用户输入倒计时时长,并将输入的字符串转换为整数类型。
调用
countdown
函数:- 调用
countdown
函数,传入用户指定的秒数。
- 调用
进入
countdown
函数:- 初始化
t
为用户输入的值。
- 初始化
for 循环:
- 使用
for remaining in range(t, 0, -1)
从t
到1
进行倒计时。 - 计算分钟数和秒数:
- 使用
divmod(remaining, 60)
计算剩余时间的分钟数和秒数。
- 使用
- 格式化时间:
- 使用
'{:02d}:{:02d}'.format(mins, secs)
将剩余时间格式化为MM:SS
的形式。
- 使用
- 打印时间到控制台:
- 使用
print(timer, end="\r")
在控制台上打印当前时间,使用\r
回车符在同一行上更新输出。
- 使用
- 暂停程序执行 1 秒钟:
- 使用
time.sleep(1)
暂停程序执行 1 秒钟。
- 使用
- 减少
t
的值:for
循环自动减少remaining
的值。
- 使用
倒计时结束:
- 当
for
循环结束时,倒计时已经完成。 - 打印“倒计时结束”:
- 在控制台上打印“倒计时结束”。
- 播放提示音:
- 使用
winsound.Beep(1000, 1000)
播放提示音,频率为 1000 Hz,持续时间为 1000 毫秒(1 秒)。
- 使用
- 当
结束:
- 程序结束。
for…else语句
与if类似的,for也有一个else语句。在for…else语句中,else中的语句会在循环执行完(即for不是通过break跳出而中断的)的情况下执行。for…else语句的格式如下:
1 | for iterating_var in sequence: |
上述语法中各参数解释如下:
- iterating_var:表示循环变量
- sequence:表示遍历对象,通常是元组、字典和列表等
- statements1:表示for语句中的循环体,他的执行次数就是遍历对象中值的数量
- statements2:else语句中的statements2,只有在循环正常退出时(遍历完所有遍历对象中的值)执行
举例如下:
1 | # 定义一个数字列表,其中包含一系列整数 |
上诉代码的执行效果如下:
1 | 找到了一个偶数: 10 |
我们可以在一个for语句中使用另一个for语句,即嵌套fpr循环,这种嵌套式的语法格式如下:
1 | for iterating_var in sequence1: |
举例如下:
1 | # 定义一个二维列表,表示一个 3x3 的矩阵 |
上述代码的执行效果如下:
1 | 1 2 3 |
后记
其实,for 循环和 if 语句在某些方面有相似之处,但它们的功能和使用场景不同。for 循环可以自动遍历序列中的每个元素,而 if 语句则用于条件判断。如果要用 if 语句实现循环功能,通常需要嵌套多层代码,这会使得代码变得复杂且难以维护。相比之下,for 循环更为简洁和直观,尽管初次接触时可能会觉得有些难以理解,但通过实践和练习,你会逐渐掌握其用法。
例如,在 for…else 结构中,break 语句的作用可能一开始不太容易理解。但实际上,break 用于在满足某个条件时提前终止循环。以一个简单的例子来说明:假设我们要通过累加 1 来达到目标值 5。一旦累加的结果达到 5,我们就可以使用 break 语句停止循环。如果在累加过程中始终没有达到 5(比如只能加到 3),那么循环会在遍历完所有元素后正常结束,此时 else 块中的代码将会执行。
具体来说,for…else 的工作原理如下
- for 循环会遍历指定的序列。
- 如果在循环体内使用了 break 语句并因此提前退出循环,则 else 块不会被执行。
- 如果循环自然结束(即没有遇到 break 语句),则 else 块中的代码会被执行。
这样,for…else 结构提供了一种方便的方式来处理循环结束后的情况,无论是在找到特定条件时提前终止还是在遍历完所有元素后执行一些额外的操作。
- 标题: Python学习日志07-基础语法学习06
- 作者: 亓翎_Re-TikaRa
- 创建于 : 2024-12-02 17:14:22
- 更新于 : 2024-12-03 11:46:58
- 链接: https://re-tikara.fun/posts/a975f408/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。