目录
4. 使用if语句处理列表
通过结合使用if语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效地管理不断变化的情形,如餐馆是否还有特定的食材;证明代码在各种情形下都将按预期那样运行。
4.1 检查特殊元素
继续使用前面的披萨店示例。这家披萨店在制作披萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到披萨中的配料,可以以极高的效率编写这样的代码:
requesteds = ['mushrooms', 'onions', 'green peppers','pineapple']
for requested in requesteds:
print("Adding " + requested + ".")
print("\nFinished making your pizza!")
输出结果为:
Adding mushrooms.
Adding onions.
Adding green peppers.
Adding pineapple.
Finished making your pizza!
输出很简单,因为上述代码不过是一个简单的for循环。
然而,如果比萨店的’ green peppers’用完了,该如何处理呢?为妥善地处理这种情况,可在for循环中包含一条if语句:
requesteds = ['mushrooms', 'onions', 'green peppers','pineapple']
##if requesteds:##判断列表不是空的
for requested in requesteds:
if requested == 'green peppers':
print("Sorry, we are out of green peppers right now.")
else:
print("Adding " + requested + ".")
print("\nFinished making your pizza!")
输出结果为:
Adding mushrooms.
Adding onions.
Sorry, we are out of green peppers right now.
Adding pineapple.
Finished making your pizza!
这里在比萨中添加每种配料前都进行检查。 首先检查顾客点的是否是青椒,如果是,就显示一条消息,指出不能点青椒的原因。 然后else代码块确保其他配料都将添加到比萨中。
4.2 确定列表不是空的
到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行for循环前确定列表是否为空很重要。
下面在制作比萨前检查顾客点的配料列表是否为空。如果列表是空的,就向顾客确认他是否要点普通比萨;如果列表不为空,就像前面的示例那样制作比萨:
requested_toppings = []
if requested_toppings:
for requested_topping in requested_toppings:
print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
else:
print("Are you sure you want a plain pizza?")
输出结果为:
Are you sure you want a plain pizza?
4.3 使用多个列表
顾客的要求往往五花八门,在披萨配料方面尤其如此。如果顾客要在披萨中添加炸薯条,该怎么办呢?可使用列表和if语句来确定能否满足顾客的要求。
来看看在制作披萨前如何拒绝怪异的配料要求。下面的示例定义了两个列表,其中第一个列表包含披萨店供应的配料,而第二个列表包含顾客点的配料。这次对于requested_toppings中的每个元素,都检查它是否是披萨店供应的配料,再决定是否在披萨中添加它:
available_toppings = ['mushrooms', 'olives', 'green peppers',
'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
for requested_topping in requested_toppings:
if requested_topping in available_toppings:
print("Adding " + requested_topping + ".")
else:
print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")
输出结果为:
Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.
Finished making your pizza!
上例中,我们首先定义一个列表,其中包含披萨店供应的配料。再定义一个列表,其中包含顾客点的配料。然后我们遍历顾客点的配料列表,在这个循环中,对于顾客点的每种配料,我们都检查它是否包含在供应的配料列表中;如果答案是肯定的,就将其加入到披萨中,否则将运行else代码块:打印一条消息,告诉顾客不供应这种配料。
5. 设置if语句的格式
本章的每个示例都展示了良好的格式设置习惯。在条件测试的格式设置方面, PEP 8提供的唯一建议是,在诸如==、 >=和<=等比较运算符两边各添加一个空格,例如, if age < 4:要比if age<4:好。
这样的空格不会影响Python对代码的解读,而只是让代码阅读起来更容易。