本篇我们学习如何在 Python 中模拟 do…while 循环语句。

do…while 循环语句

许多编程语言,例如 JavaScript、Java、 C# 等,都提供了 do…while 循环语句。这种循环语句和 while 循环的不同之处在于它至少会迭代一次。因为它在每次迭代结束时检查循环条件,当循环条件为 True 时继续执行迭代。

以下是 Python 中实现 do…while 循环的伪代码:

do
    # code block
while condition

Python 目前还不支持这种 do…while 循环语法。不过,我们可以使用 while 循环加上 break 语句模拟这种语句。

首先,我们可以为 while 循环指定一个总是成立的条件 Ture,例如:

while True:
    # code block

这种方法可以用于实现代码块的第一次执行。实际上这是一个无限循环,我们需要定义退出循环的条件:

while True:
    # code block

    # break out of the loop
    if condition:
        break

以上语法中,代码块至少会被执行一次,每次迭代之后会检查 condition。

do…while 循环模拟示例

假如我们需要开发一个猜数字的游戏,逻辑如下:

  • 首先,生成一个 0 到 10 之间的随机数字。
  • 然后,重复提示用户输入一个数字。如果输入的数字小于或者大于生成的随机数,显示相应的提示。如果输入的数字等于随机数,结束循环。

以下代码使用 while 循环实现猜数字游戏:

from random import randint

# determine the range
MIN = 0
MAX = 10

# generate a secret number
secret_number = randint(MIN, MAX)

# initialize the attempt
attempt = 0

# The first attempt
input_number = int(input(f'Enter a number between {MIN} and {MAX}:'))
attempt += 1

if input_number > secret_number:
    print('It should be smaller.')
elif input_number < secret_number:
    print('It should be bigger.')
else:
    print(f'Bingo! {attempt} attempt(s)')

# From the second attempt
while input_number != secret_number:

    input_number = int(input(f'Enter a number between {MIN} and {MAX}:'))
    attempt += 1

    if input_number > secret_number:
        print('It should be smaller.')
    elif input_number < secret_number:
        print('It should be bigger.')
    else:
        print(f'Bingo! {attempt} attempt(s)')

运行程序并输入一些数字:

Enter a number between 0 and 10:5
It should be bigger.
Enter a number between 0 and 10:7
It should be bigger.
Enter a number between 0 and 10:8
Bingo! 3 attempt(s)

由于 while 循环在迭代开始就执行了条件检查,所以需要重复编写两次提示用户输入和数字比较的代码,循环之前写一次,循环内部写一次。

为了避免这种重复的代码,我们可以使用模拟的 do while 循环实现以上功能:

from random import randint

# determine the range
MIN = 0
MAX = 10

# generate a secret number
secret_number = randint(MIN, MAX)

# initialize the attempt
attempt = 0

while True:
    attempt += 1

    input_number = int(input(f'Enter a number between {MIN} and {MAX}:'))

    if input_number > secret_number:
        print('It should be smaller.')
    elif input_number < secret_number:
        print('It should be bigger.')
    else:
        print(f'Bingo! {attempt} attempt(s)')
        break

以上代码修改的内容如下:

  • 首先,删除了 while 循环之前的代码。
  • 其次,增加了停止循环 break 语句,当输入的数字等于随机数时停止循环。

总结

  • Python 不支持 do…while 循环语句。
  • Python 可以使用 while 循环加上 break 语句模拟 do…while 循环。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐