Python入门教程第56篇 循环进阶之while…else语句
Posted 不剪发的Tony老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第56篇 循环进阶之while…else语句相关的知识,希望对你有一定的参考价值。
第 18 篇介绍了 Python 中的 while 循环语句。本篇讨论一下 while 语句的 else 分支选项。
while else 语句
Python 中的 while 语句支持一个可选的 else 分支,语法如下:
while condition:
# code block to run
else:
# else clause code block
以上语法中,每次迭代开始都会检测 condition,如果结果为 True,执行 while 语句中的代码。如果 condition 条件为 False,将会执行 else 分支。然而,如果循环被 break 或者 return 语句终止,则不会执行 else 分支。
以下流程图演示了 while…else 语句的执行过程:
接下来我们看一个示例。
while else 语句示例
以下是一个列表,包含了各种水果;每个水果由一个字典组成,包含了它的名称和数量。
basket = [
'fruit': 'apple', 'qty': 20,
'fruit': 'banana', 'qty': 30,
'fruit': 'orange', 'qty': 10
]
现在我们需要编写一个程序,允许用户输入一个水果名称。然后基于该输入搜索 basket 列表,如果找到相应的水果则显示它的数量。如果没有找到相应的水果,允许用户输入该水果的数量并将其添加到列表中。
为此,我们可以编写以下程序:
basket = [
'fruit': 'apple', 'qty': 20,
'fruit': 'banana', 'qty': 30,
'fruit': 'orange', 'qty': 10
]
fruit = input('Enter a fruit:')
index = 0
found_it = False
while index < len(basket):
item = basket[index]
# check the fruit name
if item['fruit'] == fruit:
found_it = True
print(f"The basket has item['qty'] item['fruit'](s)")
break
index += 1
if not found_it:
qty = int(input(f'Enter the qty for fruit:'))
basket.append('fruit': fruit, 'qty': qty)
print(basket)
以上代码并不是最佳实现,在此仅用于演示。它的执行过程如下:
- 首先,使用 input() 函数接收用户输入。
- 其次,将下标 index 初始化为 0,将 found_it 标识初始化为 False。下标 index 用于访问 basket 列表。found_it 标识将会在找到相应水果时被设置为 True。
- 然后,遍历列表并检测对应水果名称是否和输入匹配。如果匹配,将 found_it 设置为 True,显示水果数量并退出循环。
- 最后,循环结束后检查 found_it 标识,如果 found_it 结果为 False 则将新的水果追加到列表中。
使用 apple 作为输入时的运行结果如下:
Enter a fruit:apple
The basket has 20 apple(s)
使用 lemon 作为输入时的运行结果如下:
Enter a fruit:lemon
Enter the qty for lemon:15
['fruit': 'apple', 'qty': 20, 'fruit': 'banana', 'qty': 30, 'fruit': 'orange', 'qty': 10, 'fruit': 'lemon', 'qty': 15]
该程序可以按照预期运行,但是如果使用 while else 实现,可以更加简洁。例如:
basket = [
'fruit': 'apple', 'qty': 20,
'fruit': 'banana', 'qty': 30,
'fruit': 'orange', 'qty': 10
]
fruit = input('Enter a fruit:')
index = 0
while index < len(basket):
item = basket[index]
# check the fruit name
if item['fruit'] == fruit:
print(f"The basket has item['qty'] item['fruit'](s)")
found_it = True
break
index += 1
else:
qty = int(input(f'Enter the qty for fruit:'))
basket.append('fruit': fruit, 'qty': qty)
print(basket)
修改后的程序不需要使用 found_it 标识和循环语句之后的 if 语句。如果没有找到相应的水果,while 循环将会正常终止,并且执行 else 分支增加新的水果。如果找到了相应的水果,while 循环将会通过 break 语句提前终止,此时不会执行 else 分支。
总结
- 如果 while else 语句的循环检查条件为 False,并且循环不是通过 break 或者 return 语句终止,将会执行 else 分支。
- 如果 while 循环中存在任何标识变量,可以尝试使用 while else 语句。
以上是关于Python入门教程第56篇 循环进阶之while…else语句的主要内容,如果未能解决你的问题,请参考以下文章
Python入门教程第55篇 循环进阶之for…else语句