通过结合使用if语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效地管理不断变化的情形,如餐馆是否还有特定的食材;证明代码在各种情形下都将按预期那样运行。
5.4.1 检查特殊元素
本章开头通过一个简单示例演示了如何处理特殊值’byd’——它需要采用不同的格式进行打印。既然你对条件测试和if语句有了大致的认识,下面来进一步研究如何检查列表中的特殊值,并对其做合适的处理。
继续使用前面的粽子店示例。这家粽子店在卖粽子时,每卖出一种馅料的粽子都打印一条消息。通过创建一个列表,在其中包含顾客点的馅料,并使用一个循环来指出添加到粽子中的馅料,可以以极高的效率编写这样的代码:
orders = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
for zongzi in orders:
print(f'{zongzi}已经准备好,请收好!')
输出很简单,因为上述代码不过是一个简单的for循环:
五花肉粽已经准备好,请收好!
蛋黄五花肉粽已经准备好,请收好!
精肉粽已经准备好,请收好!
然而,如果粽子店的蛋黄五花肉粽卖完了,该如何处理呢?为妥善地处理这种情况,可在for循环中包含一条if语句:
orders = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
for zongzi in orders:
if zongzi == '蛋黄五花肉粽':
print(f'抱歉,{zongzi}已经卖完了,请明天早点来!')
else:
print(f'{zongzi}已经准备好,请收好!')
输出:
五花肉粽已经准备好,请收好!
抱歉,蛋黄五花肉粽已经卖完了,请明天早点来!
精肉粽已经准备好,请收好!
5.4.2 确定列表不是空的
到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行for循环前确定列表是否为空很重要。
下面在售卖粽子前检查顾客点的列表是否为空。如果列表是空的,就把顾客骂一顿;如果列表不为空,就像前面的示例那样出售粽子:
orders = []
if orders:
for zongzi in orders:
if zongzi == '蛋黄五花肉粽':
print(f'抱歉,{zongzi}已经卖完了,请明天早点来!')
else:
print(f'{zongzi}已经准备好,请收好!')
else:
print('你是来找茬的是吧?')
输出:
你是来找茬的是吧?
5.4.3 使用多个列表
顾客的要求往往五花八门,在粽子方面尤其如此。如果顾客要蛤蟆肉馅的粽子,该怎么办呢?可使用列表和if语句来确定能否满足顾客的要求。
来看看在出售粽子前如何拒绝怪异的订单。下面的示例定义了两个列表,其中第一个列表包含粽子店提供的粽子馅料,而第二个列表包含顾客点的馅料。这次对于orders中的每个元素,都检查它是否是粽子店提供的,再决定是否能卖给他:
available = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
orders = ['蛋黄五花肉粽', '蛤蟆肉粽']
if orders:
for zongzi in orders:
if zongzi not in available:
print(f'抱歉,我们不卖{zongzi}!')
else:
print(f'{zongzi}已经准备好,请收好!')
else:
print('你是来找茬的是吧?')
输出:
蛋黄五花肉粽已经准备好,请收好!
抱歉,我们不卖蛤蟆肉粽!