Python入门教程第57篇 循环进阶之模拟do…while语句

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第57篇 循环进阶之模拟do…while语句相关的知识,希望对你有一定的参考价值。

本篇我们学习如何在 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 循环。

以上是关于Python入门教程第57篇 循环进阶之模拟do…while语句的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第55篇 循环进阶之for…else语句

Python入门教程第62篇 函数进阶之类型提示

Python入门教程第61篇 函数进阶之偏函数

Python入门教程第58篇 函数进阶之元组解包

Python入门教程第60篇 函数进阶之可变关键字参数

Python入门教程第59篇 函数进阶之可变参数