Visual Basic 6.0 与 Python 3 中的循环结构
Visual Basic 6.0 and Python

泓熠 (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

			

花哨的 Do…Loop 语句

但是,为什么我们会听到前测型后测型、当型直到型这样复杂的复杂的名词呢?
我们首先来看一下这些名词的定义,以自然语言的句意来理解它们。
若条件成立则执行循环体的循环为当型循环。
若条件成立则终止循环的为直到型循环。
先判断条件再决定是否执行循环体的是前测型。
先执行循环体再判断条件决定是否继续下次循环的为后测型。
由此我们可以看出,上文介绍的 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 <循环变量>

			

执行步骤:

  1. 首先将循环变量设置为处置。
  2. 判断循环变量的绝对值是否超过终值的绝对值,如果是,则退出循环,执行 Next 语句之后的语句,否则继续第 3 步。
  3. 执行循环体部分,即执行 For 语句和 Nex 语句之间的语句组。
  4. 将循环变量加上步长并赋值给循环变量自身。
  5. 返回第 2 步继续执行。

由此一系列操作,其实是实现了次数为 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 语句来说要方便地多。

参考资料