泓熠 (HY)
Copyright © 2026, 泓熠 (HY).
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
2026 年修订注:一篇 2020 年的旧文
本文简要介绍 Visual Basic 6.0 与 Python 3.x 的循环结构以及将两者做简明对比,梳理其中的循环逻辑。
我们从 Python 中的 While 语句讲起。While 语句在 Python 中成为无限循环或条件循环,其语法很简单:
While <条件>:
<循环体<
先判断条件,当条件判断为 True 时,执行循环体语句块中的语句,然后再次判断条件,若为 True,再次执行循环体...直到判断条件为 False 时,循环终止,执行与 While 同级别缩进的后续语句。
其等同于 VB 中的 Whlie...Wend 语句
Python 中的 While 语句和 VB 中的 While…Wend 语句是最自然,最一般的循环结构表达方法。掌握此就足够写出几乎所有的循环程序了。
While <条件>
<循环体>
Wend
但是,为什么我们会听到前测型后测型、当型直到型这样复杂的复杂的名词呢?
我们首先来看一下这些名词的定义,以自然语言的句意来理解它们。
若条件成立则执行循环体的循环为当型循环。
若条件成立则终止循环的为直到型循环。
先判断条件再决定是否执行循环体的是前测型。
先执行循环体再判断条件决定是否继续下次循环的为后测型。
由此我们可以看出,上文介绍的 While 语句和 While…Wend 语句都属于当型前测型循环。
直到型循环相当于在当型循环的条件处加了一个非门,可以更直观地称作当否型,其实两者表达能力是一样的,我们可以将两者互相转化。
对于当型(或直到型)前测型循环,若条件一开始就不成立(或成立),那么循环体一次也没有执行,即可以实现循环次数为0。
对于后测型循环,无论条件如何,循环体都要先执行一次。因为在同一次循环中,判断循环条件放在执行循环体之后,而条件是否成立影响的是下一次循环是否执行。后测型循环至少要执行一次循环体,不能实现循环次数为0的情况。故表达能力要弱于前测型循环。后测型循环可以嵌套进分支选择结构(If语句)来提升表达能力至和前测型相当。(先用If来判断条件来决定是否进入循环语句)
在 VB 的 Do…Loop 语句家族中,当型前测型为 Do While…Loop,直到型前测型为 Do Until…Loop,当型后测型为Do…Loop While,直到型后测型为 Do…Loop Until,其中 Do While…Loop 和 While…Wend 是等同的。
而 Python 中就没有这么多花哨的表达方式,一句 While 走遍天下。
接下来我们介绍步长循环与遍历循环。
对于要已知循环次数的情景,VB 和 Python 中都提供了更为方便的表达方式,即 VB 中的 For...Next 语句步长循环和 Python 中的 for 语句遍历循环。
For <循环变量> = <初值> To <终值> [Step 步长]
<循环体>
[Exit For]
Next <循环变量>
执行步骤:
由此一系列操作,其实是实现了次数为 Int((终值-初值)/步长+1) 的循环(Int函数是返回不大于参数的最大整数)。
但是与「机械地重复循环体一定次数」不同,此语句中地循环变量与循环体不是独立存在的,我们可以在循环体中引用循环变量。
翻译成 While...Wend 语句是(根据 VB 语法,循环变量应先定义其数据类型)
<循环变量> = <初值>
While Abs(<循环变量>) <= Abs(<循环次数>)
<循环体>
i = i + <步长>
Wend
类似地,在 Python 中有 for 语句遍历循环
for <循环变量> in <遍历结构>
<循环体>
句意是从遍历结构中逐一提取元素,放在循环变量中,对于所提取的每个元素执行一次循环体。
同样地,我们也可以在循环体中引用循环变量。如果要实现执行循环体 N 次,我们可以将 Range(N) 函数放入遍历结构中,这样就可以翻译成 While 语句。
<循环变量> = 1
While <循环变量> <= <循环次数>
<循环变量> = <循环变量> + 1
<语句块>
但是,for语句遍历循环的遍历结构可以是字符串、列表、文件,也就是可以实现步长不固定的、循环变量不是数学数值的、或者是遍历文件中每一行的循环。
相比于 while 语句来说要方便地多。