使用if语句处理列表
当您组合列表和 if 语句时,您可以做一些有趣的工作。 您可以观察需要与列表中的其他值区别对待的特殊值。 您可以有效地管理不断变化的条件,例如整个轮班期间餐厅中某些物品的供应情况。 您还可以开始证明您的代码在所有可能的情况下都按预期工作。
检查特殊元素
本章从一个简单的例子开始,展示了如何处理像 'bmw' 这样的特殊值,它需要以不同于列表中其他值的格式打印。 现在您对条件测试和 if 语句有了基本的了解,让我们仔细看看如何观察列表中的特殊值并适当地处理这些值。
让我们继续比萨店的例子。 每当您的披萨在制作过程中添加配料时,披萨店都会显示一条消息。 可以非常高效地编写此操作的代码,方法是列出客户要求的浇头,并使用循环来宣布每个浇头被添加到比萨饼中:
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")
输出很简单,因为这段代码只是一个简单的 for 循环:
Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!
但是,如果比萨店的青椒用完了怎么办? for 循环中的 if 语句可以适当地处理这种情况:
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
if requested_topping == 'green peppers':
print("Sorry, we are out of green peppers right now.")
else:
print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")
这一次,我们在将其添加到比萨饼之前检查每个请求的项目。 if 语句检查此人是否请求了青椒。 如果是这样,我们会显示一条消息,告知他们为什么不能吃青椒。 else 块确保将所有其他配料添加到比萨饼中。
输出显示每个请求的浇头都得到了适当的处理。
Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!
确定列表非空
到目前为止,我们对我们使用过的每个列表都做了一个简单的假设:我们假设每个列表中至少有一个项目。 很快我们将让用户提供存储在列表中的信息,因此我们无法假设每次运行循环时列表中都有任何项目。 在这种情况下,在运行 for
循环之前检查列表是否为空很有用。
例如,让我们在构建比萨饼之前检查要求的浇头列表是否为空。 如果列表为空,我们将提示用户并确保他们想要一个普通的比萨饼。 如果列表不为空,我们将像前面的示例一样制作披萨:
requested_toppings = []
if requested_toppings:
for requested_topping in requested_toppings:
print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")
这次我们从一个空的请求浇头列表开始。 我们没有直接进入 for
循环,而是先进行快速检查。 当在 if
语句中使用列表的名称时,如果列表至少包含一项,则 Python 返回 True
; 空列表的计算结果为 False
。 如果 requested_toppings 通过条件测试,我们将运行与上一个示例中使用的相同的 for 循环。 如果条件测试失败,我们会打印一条消息,询问客户是否真的想要一个没有浇头的普通披萨。
在这种情况下列表是空的,所以输出询问用户是否真的想要一个普通的比萨饼:
Are you sure you want a plain pizza?
如果列表不为空,输出将显示添加到比萨饼中的每个请求的配料。
使用多个列表
人们几乎会要求任何东西,尤其是在披萨配料方面。 如果顾客真的想要在他们的比萨饼上加炸薯条怎么办? 您可以使用列表和 if 语句来确保您的输入在您采取行动之前有意义。
在制作比萨饼之前,让我们注意不寻常的浇头要求。 以下示例定义了两个列表。 第一个是比萨店可用的配料列表,第二个是用户请求的配料列表。 这一次,在将 requested_toppings 中的每个项目添加到比萨饼之前,都会根据可用浇头列表进行检查:
available_toppings = ['mushrooms', 'olives', 'green peppers',
'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese'] (1)
for requested_topping in requested_toppings:
if requested_topping in available_toppings: (2)
print(f"Adding {requested_topping}.")
else: (3)
print(f"Sorry, we don't have {requested_topping}.")
print("\nFinished making your pizza!")
1 | 首先,我们定义了这个比萨店可用的配料列表。 请注意,如果比萨店有稳定的浇头选择,则这可能是一个元组。 然后,我们列出了客户要求的浇头。 在这个例子中有一个不寻常的浇头请求:“炸薯条(french fries)”。 |
2 | 接下来我们遍历请求的浇头列表。 在循环中,我们检查每个请求的浇头是否确实在可用浇头列表中。 如果是,我们将那个配料添加到比萨饼中。 |
3 | 如果请求的浇头不在可用浇头列表中,则 else 块将运行。 else 块打印一条消息,告诉用户哪些配料不可用。 |
此代码语法产生干净、信息丰富的输出:
Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.
Finished making your pizza!
仅用几行代码,我们就非常有效地管理了现实世界的情况!