5.5 Python使用if语句处理列表

5.4 使用if语句处理列表

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

5.4.1 检查特殊元素

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

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

requested_toppings = ['mushrooms','green peppers','extra cheese']

for requested_topping in requested_toppings:
    print("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("Adding " + requested_topping + ".")

print("\nFinished making your pizza!")

这里在比萨中添加每种配料前都进行检查。第四行的代码检查顾客点的是否是青椒,如果是,就显示一条消息,指出不能点青椒的原因。第六行的else代码块确保其他配料都将添加到比萨中。输出表明,妥善地处理了顾客点的每种配料:

Adding mushrooms.Sorry,we are out of green peppers right now.

Adding extra cheese.

Finished making your pizza!

5.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 upu sure you want a plain pizza?")

在这里,我们首先创建了一个空列表,其中不包含任何配料(见第一行)。在第三行我们进行了简单检查,而不是直接执行for循环。在if语句中将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回True,并在列表为空时返回False。如果requested_toppings不为空,就运行与前一个示例相同的for循环;否则,就打印一条消息,询问顾客是否确实要点不加任何配料的普通比声(见倒数第二行)。在这里,这个列表为空,因此输出如下——询问顾客是否确实要点普通比萨:

Are upu sure you want a plain pizza?

如果这个列表不为空,将显示在披萨中添加各种配料的输出。

5.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("\nFinshed making your pizza!")

在第一行,我们定义了一个列表,其中包含比萨店供应的配料。请注意,如果比萨店供应的配料是固定的,也可使用一个元组来存储它们。**在第三行,我们又创建了一个列表,其中包含顾客点的配料,请注意那个不同寻常的配料一'french fries’。**在第五行,我们遍历顾客点的配料列表在这个循环中,对于顾客点的每种配料,我们都检查它是否包含在供应的配料列表中(见第六行 );如果答案是肯定的,就将其加人到比萨中,否则将运行else代码块(见倒数第二行) : 打印一条消息,告诉顾客不供应这种配料。这些代码的输出整洁而详实:

Adding mushrooms.Sorry,we don't have french fries.Adding extra cheese.

Finshed making your pizza!

通过为数不多的几行代码,我们高效地处理了一种真实的情形!

动手试一试

#5-8 以特殊方式跟管理员打招呼: 创建一个至少包含5个用户名的列表,且其中一个用户名为'admin'。想象你要编写代码,在每位用户登录网站后都打印一条问候消息遍历用户名列表,并向每位用户打印一条问候消息。
#1.如果用户名为'admin',就打印一条特殊的问候消息,如"Hello admin,would you like to see a status report?"。
#2.否则,打印一条普通的问候消息,如“Hello Eric,thank you for logging in again”。
users = ['pig','dog','admin','cat','monkey']
for user in users:
    if user == 'admin':
        print('\nHello Admin,would you like to see a status report?')
    else:
        print('\nHello '+user.title()+',thank you for logging in again.')
#5-9处理没有用户的情形: 在为完成练习5-8编写的程序中,添加一条if语句,检查用户名列表是否为空。
#1.如果为空,就打印消息"We need to find some users!"。
#2.删除列表中的所有用户名,确定将打印正确的消息。
names=['pig','dog','admin','cat','monkey']
if names:#这行代码检查 names 是否为空。如果列表不为空,下面的代码块将执行;否则,将打印消息 "We need to find some users."。
    for name in names:
        if name=='admin':
            print('\nHello Admin,would you like to see a status report?')
        else:
            print('\nHello '+name.title()+',thank you for logging in again.')
else:#如果 names 列表为空,将打印消息 "We need to find some users."。
    print('We need to find some users.')
#5-10 检查用户名: 按下面的说明编写一个程序,模拟网站确保每位用户的用户名都独一无二的方式。
#1.创建一个至少包含5个用户名的列表,并将其命名为current_users。
#2.再创建一个包含5个用户名的列表,将其命名为new_users,并确保其中有一两个用户名也包含在列表current_users中。
#3.遍历列表new_users,对于其中的每个用户名,都检查它是否已被使用。如果是这样,就打印一条消息,指出需要输入别的用户名;否则,打印一条消息,指出这人用户名未被使用。
#4.确保比较时不区分大消息; 换句话说,如果用户名'john'已被使用,应拒绝用户名'JOHN'。
current_users_0=['Admin','Eric','Mike','Susan','Judy']     # 定义一个包含 5 个字符串的列表,表示当前的用户
new_users=['shield','admin','lily','eric','ben']     # 定义一个包含 5 个字符串的列表,表示新的用户
current_users_1=[]     # 定义一个新的空列表,用来存储转换为小写字母的当前用户列表
for current_user in current_users_0: # 循环遍历当前用户列表
    current_users_1.append(current_user.lower())       # 将每个用户名转换为小写字母,并添加到新的列表 current_users_1 中
print(current_users_1)     # 打印转换后的当前用户列表
for new_user in new_users:    # 循环遍历新的用户列表
    if new_user.lower() in current_users_1:    # 如果新的用户名在转换后的当前用户列表中存在
        print('\nYou need to choose a different name.')    # 打印提示信息,表示需要选择一个不同的用户名
    else:
        print('\nYour name is not used.')      # 打印提示信息,表示可以使用这个用户名
#5-11序数: 序数表示位置,如lst和2nd。大多数序数都以th结尾,只有1、2和3例外。
#1.在一个列表中存储数字 1~9。
#2.遍历这个列表。
#3.在循环中使用一个if-elif-else 结构,以打印每个数字对应的序数。输出内容应为 1st、2nd、3rd、4th、5th、6th、7th、8th 和9gth,但每个序数都独占一行。
numbers=list(range(1,10)) # 定义一个包含 1 到 9 的整数的列表
print(numbers) # 打印整数列表
for number in numbers: # 循环遍历整数列表中的每个元素
    print(number) # 打印当前整数
for number in numbers: # 再次循环遍历整数列表中的每个元素
    if number==1: # 如果当前整数等于 1
        print('1st') # 打印字符串 '1st',表示第一个
    elif number==2: # 如果当前整数等于 2
        print('2nd') # 打印字符串 '2nd',表示第二个
    elif number==3: # 如果当前整数等于 3
        print('3rd') # 打印字符串 '3rd',表示第三个
    else: # 如果当前整数不是 1、2、3 中的任何一个
        print(str(number)+'th') # 打印当前整数加上后缀 'th',表示第几个

猜你喜欢

转载自blog.csdn.net/Allen1862105/article/details/129317477
5.5
今日推荐