【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 循环。
  • 来源:不剪发的Tony老师

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python入门教程】第57篇 循环进阶之模拟do…while语句

    发表评论