通过结合使用if语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效地管理不断变化的情形,如餐馆是否还有特定的食材;证明代码在各种情形下都将按预期那样运行。

5.4.1 检查特殊元素

本章开头通过一个简单示例演示了如何处理特殊值’byd’——它需要采用不同的格式进行打印。既然你对条件测试和if语句有了大致的认识,下面来进一步研究如何检查列表中的特殊值,并对其做合适的处理。

继续使用前面的粽子店示例。这家粽子店在卖粽子时,每卖出一种馅料的粽子都打印一条消息。通过创建一个列表,在其中包含顾客点的馅料,并使用一个循环来指出添加到粽子中的馅料,可以以极高的效率编写这样的代码:

  1. orders = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
  2. for zongzi in orders:
  3. print(f'{zongzi}已经准备好,请收好!')

输出很简单,因为上述代码不过是一个简单的for循环:


五花肉粽已经准备好,请收好!
蛋黄五花肉粽已经准备好,请收好!
精肉粽已经准备好,请收好!


然而,如果粽子店的蛋黄五花肉粽卖完了,该如何处理呢?为妥善地处理这种情况,可在for循环中包含一条if语句:

  1. orders = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
  2. for zongzi in orders:
  3. if zongzi == '蛋黄五花肉粽':
  4. print(f'抱歉,{zongzi}已经卖完了,请明天早点来!')
  5. else:
  6. print(f'{zongzi}已经准备好,请收好!')

输出:


五花肉粽已经准备好,请收好!
抱歉,蛋黄五花肉粽已经卖完了,请明天早点来!
精肉粽已经准备好,请收好!


5.4.2 确定列表不是空的

到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行for循环前确定列表是否为空很重要。

下面在售卖粽子前检查顾客点的列表是否为空。如果列表是空的,就把顾客骂一顿;如果列表不为空,就像前面的示例那样出售粽子:

  1. orders = []
  2. if orders:
  3. for zongzi in orders:
  4. if zongzi == '蛋黄五花肉粽':
  5. print(f'抱歉,{zongzi}已经卖完了,请明天早点来!')
  6. else:
  7. print(f'{zongzi}已经准备好,请收好!')
  8. else:
  9. print('你是来找茬的是吧?')

输出:


你是来找茬的是吧?


5.4.3 使用多个列表

顾客的要求往往五花八门,在粽子方面尤其如此。如果顾客要蛤蟆肉馅的粽子,该怎么办呢?可使用列表和if语句来确定能否满足顾客的要求。

来看看在出售粽子前如何拒绝怪异的订单。下面的示例定义了两个列表,其中第一个列表包含粽子店提供的粽子馅料,而第二个列表包含顾客点的馅料。这次对于orders中的每个元素,都检查它是否是粽子店提供的,再决定是否能卖给他:

  1. available = ['五花肉粽', '蛋黄五花肉粽', '精肉粽']
  2. orders = ['蛋黄五花肉粽', '蛤蟆肉粽']
  3. if orders:
  4. for zongzi in orders:
  5. if zongzi not in available:
  6. print(f'抱歉,我们不卖{zongzi}!')
  7. else:
  8. print(f'{zongzi}已经准备好,请收好!')
  9. else:
  10. print('你是来找茬的是吧?')

输出:


蛋黄五花肉粽已经准备好,请收好!
抱歉,我们不卖蛤蟆肉粽!