python学习笔记(三)

第5章 if语句

5.1 一个简单示例

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

这个示例中的循环首先检查当前的汽车名是否是’bmw’。如果是,就以全大写的方式打印它;否则就以首字母大写的方式打印:

Audi 
BMW 
Subaru 
Toyota

5.2 条件测试

每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,Python就执行紧跟在if语句后面的代码;如果为False,Python就忽略这些代码。

5.2.1 检查是否相等

>>> car = 'bmw'
>>> car == 'bmw'
True


>>> car = 'audi'
>>> car == 'bmw'
False

这个相等运算符(==)在它两边的值相等时返回True,否则返回False。

5.2.2 检查是否相等时不考虑大小写

在Python中检查是否相等时区分大小写,两个大小写不同的值会被视为不相等:

>>> car = 'Audi'
>>> car == 'audi'
False

如果大小写无关紧要,而只想检查变量的值,可将变量的值转换为小写,再进行比较:

>>> car = 'Audi'
>>> car.lower() == 'audi'
True 
>>> car
'Audi'

函数lower()不会修改存储在变量car中的值,因此进行这样的比较时不会影响原来的变量

5.2.3 检查是否不相等

要判断两个值是否不等,可结合使用惊叹号和等号(!=)

5.2.4 比较数字

>>> age = 18
>>> age == 18
True
>>>age != 18
False


>>> age = 19
>>> age < 21
True 
>>> age <= 21
True 
>>> age > 21
False 
>>> age >= 21
False

5.2.5 检查多个条件

1. 使用and检查多个条件

要检查是否两个条件都为True,可使用关键字and将两个条件测试合而为一;如果每个测试都通过了,整个表达式就为True;如果至少有一个测试没有通过,整个表达式就为False。

>>> age_0 = 22 
>>> age_1 = 18 
>>> age_0 >= 21 and age_1 >= 21 
False 
>>> age_1 = 22 
>>> age_0 >= 21 and age_1 >= 21 
True

为改善可读性,可将每个测试都分别放在一对括号内,但并非必须这样做。
(age_0 >= 21) and (age_1 >= 21)

2. 使用or检查多个条件

关键字or也能够让你检查多个条件,但只要至少有一个条件满足,就能通过整个测试。仅当两个测试都没有通过时,使用or的表达式才为False。

>>> age_0 = 22 
>>> age_1 = 18 
>>> age_0 >= 21 or age_1 >= 21 
True 
>>> age_0 = 18 
>>> age_0 >= 21 or age_1 >= 21 
False

5.2.6 检查特定值是否包含在列表中

>>> requested_toppings = ['mushrooms', 'onions', 'pineapple'] 
>>> 'mushrooms' in requested_toppings 
True 
>>> 'pepperoni' in requested_toppings 
False

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

5.2.7 检查特定值是否不包含在列表中

确定特定的值未包含在列表中可使用关键字not in。

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

如果user的值未包含在列表banned_users中,Python将返回True,进而执行缩进的代码行。

5.2.8 布尔表达式

随着你对编程的了解越来越深入,将遇到术语布尔表达式,它不过是条件测试的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。
布尔值通常用于记录条件,在跟踪程序状态或程序中重要的条件方面,布尔值提供了一种高效的方式。

game_active = True 
can_edit = False

5.3 if语句

5.3.1 简单的if语句

最简单的if语句只有一个测试和一个操作:

if conditional_test: 
 do something

在第1行中,可包含任何条件测试,而在紧跟在测试后面的缩进代码块中,可执行任何操作。如果条件测试的结果为True,Python就会执行紧跟在if语句后面的代码;否则Python将忽略这些代码。
在紧跟在if语句后面的代码块中,可根据需要包含任意数量的代码行。

5.3.2 if-else语句

经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的if-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.3 if-elif-else结构

经常需要检查超过两个的情形,为此可使用Python提供的if-elif-else结构。Python只执行if-elif-else结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测
试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。

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

5.3.4 使用多个elif代码块

可根据需要使用任意数量的elif代码块

5.3.5 省略else代码块

Python并不要求if-elif结构后面必须有else代码块。

5.3.6 测试多个条件

有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含elif和else代码块的简单if语句。在可能有多个条件为True,且你需要在每个条件为True时都采取相应措施时,适合使用这种方法。

requested_toppings = ['mushrooms', 'extra cheese'] 
if 'mushrooms' in requested_toppings: 
 print("Adding mushrooms.") 
if 'pepperoni' in requested_toppings: 
 print("Adding pepperoni.") 
if 'extra cheese' in requested_toppings: 
 print("Adding extra cheese.") 
 
print("\nFinished making your pizza!")

总之,如果你只想执行一个代码块,就使用if-elif-else结构;如果要运行多个代码块,就使用一系列独立的if语句。

5.4 使用if语句处理列表

5.4.1 检查特殊元素

本章开头通过一个简单示例演示了如何处理特殊值’bmw’——它需要采用不同的格式进行打印。下面来进一步研究如何检查列表中的特殊值,并对其做合适的处理。
继续使用前面的比萨店示例。这家比萨店在制作比萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到比萨中的配料,可以以极高的效率编写这样的代码:

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': #1
 print("Sorry, we are out of green peppers right now.") 
 else: #2
 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?")

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

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

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

Adding mushrooms. 
Sorry, we don't have french fries. 
Adding extra cheese. 
Finished making your pizza!

5.5 设置if语句的格式

本章的每个示例都展示了良好的格式设置习惯。在条件测试的格式设置方面,PEP 8提供的唯一建议是,在诸如==、>=和<=等比较运算符两边各添加一个空格,例如,if age < 4:要比if age<4:好。
这样的空格不会影响Python对代码的解读,而只是让代码阅读起来更容易。

5.6 小结

在本章中,你学习了如何编写结果要么为Ture要么为False的条件测试。你学习了如何编写简单的if语句、if-else语句和if-elif-else结构。在程序中,你使用了这些结构来测试特定的条件,以确定这些条件是否满足。你学习了如何在利用高效的for循环的同时,以不同于其他元素的方式对特定的列表元素进行处理。你还再次学习了Python就代码格式方面提出的建议,这可确保即便你编写的程序越来越复杂,其代码依然易于阅读和理解。
在第6章,你将学习Python字典。字典类似于列表,但让你能够将不同的信息关联起来。你将学习如何创建和遍历字典,以及如何将字典同列表和if语句结合起来使用。学习字典让你能够模拟更多现实世界的情形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏璃只想划水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值