5.if循环 以及for循环if循环的结合使用

if语句

5.1 先来个简单的例子

假设你有一个汽车
列表,并想将其中每辆汽车的名称打印出来。对于大多数汽车,都应以首字母大写的方式打印其
名称,但对于汽车名’bmw’,应以全大写的方式打印。下面的代码遍历一个列表,并以首字母大
写的方式打印其中的汽车名,但对于汽车名’bmw’,以全大写的方式打印:
cars.py

cars = ['audi','bmw','subaru','toyota']
for car in cars:
	if car == 'bmw':
		print(car.upper())
	else:
		print(car.title())

结果为:

Audi
BMW
Subaru
Toyota
5.2.1条件测试 检查是否相等
>>> car = 'bmw'
>>> car == 'bmw'
True 

我们首先使用一个等号将car的值设置为’bmw’(见),这种做法你已见过很多次。接下来,
使用两个等号(==)检查car的值是否为’bmw’。这个相等运算符在它两边的值相等时返回True,
否则返回False。在这个示例中,两边的值相等,因此Python返回True。
如果变量car的值不是’bmw’,上述测试将返回False:

1.>>> car = 'audi'
2.>>> car == 'bmw'
False

一个等号是陈述;对于1.处的代码,可解读为“将变量car的值设置为’audi’”。两个等号是
发问;对于2.处的代码,可解读为“变量car的值是’bmw’吗?”。大多数编程语言使用等号的方
式都与这里演示的相同。
这一类中还有检测相等时是否考虑大小写问题 以及检查是否不相等,比较数字,就不一一赘述了

5.2.2 检查特定值是否包含在列表中
>>> requested_toppings = ['mushrooms', 'onions', 'pineapple'] 
>>> 'mushrooms' in requested_toppings 
True 
>>> 'pepperoni' in requested_toppings 
False

关键字in让Python检查列表requested_toppings是否包含’mushrooms’和
‘pepperoni’。这种技术很有用,它让你能够在创建一个列表后,轻松地检查其中是否包含特定
的值

5.2.3 检查特定值不包含在列表中

banned_user.py

banned_users = ['andrew', 'carolina', 'david'] 
user = 'marie' 
if user not in banned_users: 
 	print(user.title() + ", you can post a response if you wish.")

结果:

用户’marie’未包含在列表banned_users中,因此她将看到一条邀请她发表评论的消息:


Marie, you can post a response if you wish.

5.3.1 if—else语句

经常需要在条件下通过执行,就执行第一个缩进的print语句块,没有通过就执行else操作:

age = 17 
if age >= 18: 
 	print("You are old enough to vote!") 
 	print("Have you registered to vote yet?")
else: 
 	print("Sorry, you are too young to vote.") 
 	print("Please register to vote as soon as you turn 18!")

执行结果:

Sorry, you are too young to vote. 
Please register to vote as soon as you turn 18!
5.3.2 if—elif—else语句

如果只使用一条if语句,如何确定门票价格呢?下面的代码确定一个人所属的年龄段,并打
印一条包含门票价格的消息:
amusement_park.py

age = 12 
if age < 4: 
 	print("Your admission cost is $0.") 
elif age < 18: 
 	print("Your admission cost is $5.") 
else: 
 	print("Your admission cost is $10.")

当然了 执行结果就是:

Your admission cost is $5.

为了使代码更加简洁,可不在if-elif-else中带你因,打印门票价格,而至在其中设置门票价格,并在后边添加一个简单的print语句:

age = 12 
if age < 4: 
	price = 0 
elif age < 18: 
 	price = 5 
 else: 
 	price = 10 
print("Your admission cost is $" + str(price) + ".")

这其中还有使用多个elif代码块 以及省略else代码块以及测试多个条件 这里我就不多赘述了 非常简单。

5.4使用if语句处理列表

1.检查特殊元素

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

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!")

这里在比萨中添加每种配料前都进行检查。1处的代码检查顾客点的是否是青椒,如果是,
就显示一条消息,指出不能点青椒的原因。2
处的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 you sure you want a plain pizza?")

在这里,这个列表为空,因此输出如下——询问顾客是否确实要点普通比萨:

Are you 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("\nFinished making your pizza!")

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

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

Finished making your pizza!
5.5 小结

在本章中,学习了如何编写结果要么为Ture要么为False的条件测试。学习了如何编写简单的if语句、if-else语句和if-elif-else结构。在程序中,使用了这些结构来测试特定的条件,以确定这些条件是否满足。学习了如何在利用高效的for循环的同时,以不同于其他元素的方式对特定的列表元素进行处理。还再次学习了Python就代码格式方面提出的建议,这可确保即便编写的程序越来越复杂,其代码依然易于阅读和理解。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值