编程时经常需要检查一系列条件,并据此决定采取什么措施。在Python中,if语句让你能够检查程序的当前状态,并据此采取相应的措施。
在本章中,你将学习条件测试,以检查感兴趣的任何条件。你将学习简单的if语句,以及创建一系列复杂的if语句来确定当前到底处于什么情形。然后将学到的知识应用于列表,以编写for循环,以一种方式处理列表中的大多数元素,并以另一种不同的方式处理包含特定值的元素。
第五章 IF语句
5.1 简单实例
如何使用IF语句来正确地处理特殊情形。
message = ['Blue', 'Stock', 'Alice', 'Banana', 'max', 'sam'];
messages = [];
for i in message:#i = (str)i.append(i.lower())#messages = i.append(lower(i));messages.append(i.lower());
# 将自定义的列表元素全部转换为小写追加到空列表messages并且打印出来
print(messages);print('-------------------')# 在自定义的列表messages中,如果列表中存在一个元素等于'alice'则将该列表元素全输出大写,其他输出首字母大写
for n in messages:if n == 'alice':print(n.upper())else:print(n.title())
输出结果:
# 将自定义的列表元素全部转换为小写追加到空列表messages并且打印出来
['blue', 'stock', 'alice', 'banana', 'max', 'sam']# 分隔符
-------------------# 在自定义的列表messages中,如果列表中存在一个元素等于'alice'则将该列表元素全输出大写,其他输出首字母大写
Blue
Stock
ALICE
Banana
Max
Sam
对于上面的列表元素,都应以首字母大写的方式打印其名称,但对于“alice”,应以全大写的方式打印。下面的代码遍历一个列表,并以首字母大写的方式打印其他的messages列表元素,但对于“alice”,以全大写的方式打印:
5.2 条件测试
大多数条件测试都将一个变量的当前值同特定值进行比较。最简单的条件测试检查变量的值是否与特定值相等。
每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,Python就执行紧跟在if语句后面的代码;如果为False,Python就忽略这些代码。
5.2.1 检查是否相等
color = 'orange'
color == 'orange'
print(color);
print(color == 'orange')
# 输出结果
orange
True
解释:我们首先使用一个等号将color的值设置为’orange’,这种做法你已见过很多次。接下来,使用两个等号(==)检查color的值是否为’orange’。这个相等运算符在它两边的值相等时返回True,否则返回False。在这个示例中,两边的值相等,因此Python返回True。如果变量color的值不是’orange’,上述测试将打印返回False:
5.2.2 如何在检查是否相等时忽略大小写
在Python中检查是否相等时区分大小写。两个大小写时不同的值被视为不相等。
message = 'audi';
message == 'Audi'
print(message);
print(message == 'Audi');
输出结果:
audi
False
如果大小写很重要,这种行为有其优点。但如果大小写无关紧要,你只想检查变量的值,可以现将变量的值转换为全小写,再进行比较:
message == 'Audi'
message.lower() == 'audi';
print(message.lower() == 'audi');#输出结果
True
首先,将首字母大写的字符串’Audi’,赋给变量message。然后,获取变量message的值并将其转换为全小写的,再将结果与字符串’Audi’进行比较。这两个字符串相同,因此Python返回True。如你所见,lower()方法并没有影响存储在变量message中的值。
5.2.3 检查是否不等
要判断两个值是否不等,可使用不等运算符(!=)。下面使用一条IF语句来实例不等运算符。
message = 'messages';
message != 'message';
print(message != 'message');
输出:
True
编写的大多数条件表达式会检查两个是否相等,但有时间检查两个值是否不等的效率更高。
5.2.4 数值比较
检查数值非常简单。
age = 15;
print(age == 15);#输出结果
True
条件语句可包含各种数学比较,如小于、小于等于、大于、大于等于。
age = 15;
print(age == 15);
print(age > 16);
print(age >= 18);
print(age < 17);
print(age <= 20);
输出结果:
True
False
False
True
True
5.2.5 检查多个条件
你可能想同时检查多个条件。例如有时候需要两个条件都为True时才执行相应的操作,而有时候只要求一个条件为True。在这些情况下,关键字and和or可助你一臂之力。
-
使用and检查多个条件
要检查两个条件是否都为True,可使用关键字and将两个条件测试合而为一。如果每个条件测试都通过了,整个表达式就为True;如果至少一个条件测试没有通过,整个表达式就为False。
numbers = 20 print(numbers > 19 and numbers < 21); print(numbers > 21 and numbers < 30);# 输出结果 True False
首先,定义一个变量numbers,为这个变量赋值20,然后使用条件【numbers > 19 和 numbers < 21】进行逻辑与判断,如果两个条件都成立,则输出True;另外再使用条件【numbers > 21 and numbers < 30】进行逻辑与判断,如果结果为成立,则返回True,否则False;
-
使用or检查多个条件
关键词or也能让你检查多个条件,但只要满足其中一个条件,就能通过整个条件测试。仅当所有条件都没有通过,使用or条件才返回最终的结果False。
numbers = 20 print(numbers > 21 or numbers < 10); print(numbers > 21 or numbers < 30);#输出结果 False True
同样,首先先定义一个变量numbers,然后使用条件【numbers > 21 or numbers < 10】进行逻辑或判断,20既不大于21,或20也不小于10,顾最后输出False;相反20既不大于21,但是小于30,有一个条件成立,顾返回True。
5.2.6 检查特定的值是否在列表中
有时候,执行操作前必须检查列表是否包含特定的值。比如一个用户注册某一个系统,在用户注册到最后一步提交的时候,后台程序自动去校验该用户注册的用户身份信息是否存在,如果存在,则返回该用户已经注册,请转至登录。在Python中,要判断特定的值是否在列表中,可使用关键字in。
color = ['Purple','orange','apple','green','blue'];
print('indigo' in color);
print('apple' in color);#输出结果
False
True
关键字in让Python检查列表color是否包含’indigo’和’apple’这两个元素,其中’indigo’在列表color中不存在,顾返回False;而’apple’在列表color中存在,顾返回True。
5.2.7 检查特定的值是否不在列表中
有些时候,确定特定的值不在列表中很重要。在这种情况下,我们可以使用not in 来实现。
#d定义一个列表
color = ['Purple','orange','apple','green','blue'];
my_like_color = 'indigo';
#查看变量my_like_color的值'indigo'是否不在列表color中
if my_like_color not in color:print(f"我最喜欢的颜色{my_like_color.title()},不在列表color中。");if my_like_color in color:print(f"我最喜欢的颜色{my_like_color.title()},在列表color中。");#输出结果
True
我最喜欢的颜色Indigo,不在列表color中。
这里的if语句通俗易懂:如果my_like_color的值不在列表color中,Python将返回True,进而执行缩进的代码行;相反,如果不存在,则不会执行缩进行的print()函数。
5.2.8 布尔表达式
随着编程水平的越来越深入,布尔表达式必然是我们所需要了解的,即布尔表达式就是条件测试的另一种形式。与条件表达式一样,布尔表达式的结果要么为True,要么为False。
布尔表达式通常用于记录条件,如游戏是否正在运行或用户是否可以编辑网站的特定内容:
game_active = True;
can_edit = False;
在跟踪程序状态或程序中重要的条件方面,布尔值提供了一种高效的方式。
5.2.9 练习
条件测试:编写一些条件测试,将条件测试的结果打印出来,程序如下:
my_car = '宝马'
print(f"Is my_car == '宝马',I predict is true。");
print(my_car == '宝马')print(f"Is my_car == 'Audi',I predict is true。");
print(my_car == 'Audi')#输出结果:
Is my_car == '宝马',I predict is true。
TrueIs my_car == 'Audi',I predict is true。
False
5.2.10 本节小结
- 检查两个字符串是否相等以及不等;
- 使用lower()方法的条件测试;
- 涉及相等、不等、大于、小于、大于等于、小于等于的数值比较;
- 使用关键字and和or的条件测试;
- 测试特定的值是否在列表中;
- 测定特定的值是否不在列表中;
5.3 IF语句
理解条件测试之后,就可以开始编写if语句了。if语句有多种,选择使用哪一种取决于要测试的条件数。
5.3.1 最简单的if语句
最简单的if语句只有一个条件测试和一个操作:
if conditional_test:do something
第一行代码包含任意的条件测试语句,而紧跟在测试后面的缩进代码块中,可执行任意操作。如果条件测试的结果为True,Python就会执行紧跟在if语句后面的代码,否则Python将忽略这些代码。
age = 25;
if age > 26:print(f"小明,今年{age}岁了。")
print(f"小明,今年还没有{age}岁。");#输出结果
小明,今年还没有25岁。
在if语句中,缩进的作用与for循环中的缩进是相同的。如果条件测试通过了,将执行if语句后面所有缩进的代码行,否则将忽略它们。
可根据需要,在紧跟在if语句后面的代码块中添加任意数量的代码行。
5.3.2 if - else语句
我们经常需要在条件测试通过时执行一个操作,在没有通过时执行另外一个操作。在这种情况下,可使用Python提过的if - else语句。if - else语句块类似简单的if语句,但其中的else语句让你能够指定条件测试未通过时要执行的操作。
age = 25;
if age > 26:print(f"小明,今年{age}岁了。")
else:print(f"小明,今年还没有{age}岁。");#执行结果
小明,今年还没有25岁。
由上面的if-else语句可以知道,age 的值是小于26的,所以程序去执行else后面的print()语句。
if-else,就两种结果,要么执行,要么不执行。由此可知,if-else结构非常适合用于让Python执行两种操作中的其中一种。
5.3.3 if - elif - else语句
有时候且经常我们需要检验情况两个及以上:此时就可以使用if - elif - else语句。Python只执行if - elif - else结构中的一个代码块。它依次检查每个测试条件,直到遇到通过的测试条件,然后再执行该测试条件后面的代码块。
在现实生活中,需要考虑的情形通常会超过两个。例如:来看一个根据年龄段收费的游乐场。
- 4岁以下免费;
- 4岁(含4岁) — 18岁收费200块钱;
- 年满18岁收费420元;
上面的三个条件,如果只使用一条if语句,那么作为乘客的你该如何订票呢?首先我们需要确认一个人所属的年龄段,并将购买的门票信息打印出来:
age = 19
if age < 4:print(f"小明今年{age}岁,他的门票是免费的。"); ①
elif 4 < age < 18: # 可以使用 age < 18 代替 这里只是为了更加容易我自己理解print(f"小明今年{age}岁,他的门票是200块钱的。"); ②
else:print(f"小明今年{age}岁,他的门票是420块钱。"); ③#输出结果:
小明今年19岁,他的门票是420块钱。
①处的if测试检查一个人是否不满4岁,如果是这样,Python就打印一条合适的消息,并跳过余下的测试。
②处的elif代码行其实是另一个if测试,它仅在前面的测试未通过时才会运行。在这里,我们知道这个人不小于4岁,因为第一个测试未通过。
如果这个人未满18岁,Python将打印相应的消息,并跳过else代码块。如果if测试和elif测试都未通过,Python将运行③处else代码块中的代码。
在上面的实例中,if和elif都不满足,故而执行else后面的代码块。
为了让代码简洁,前两个测试都没有通过。在这种情况下,将执行else后面的代码块,指出门票的价格是420块钱。
5.3.4 使用多个elif代码块
可以根据需要使用任意数量的elif代码块。
假设前述游乐场要给老年人打折,可再添加一个测试条件,进而来判断顾客是否符合打折条件。如下:增加条件年满65周岁的老年人,门票打三折。
- 4岁以下免费;
- 4岁(含4岁) — 18岁收费200块钱;
- 年满18岁收费420元;
- 年满65周岁,成人门票价格打三折。
age = 66
if age < 4:print(f"小明今年{age}岁,他的门票是免费的。");
elif 4 < age < 18:print(f"小明今年{age}岁,他的门票是200块钱的。");
elif age > 65:print(f"小明今年{age}岁,他的门票是126块钱的。");
else:print(f"小明今年{age}岁,他的门票是420块钱。");#输出结果:
小明今年66岁,他的门票是126块钱的。
这些代码大都未变。第二个elif代码块,通过检查确定年龄达到且大于65岁,将门票价格打三折售出。
5.3.5 省略else代码块
Python并不要求if - elif结构后面必须有else代码块。在一些情况下,else代码块很有用;而在其他情况下,使用一条elif语句来处理特定的情形会更好。
age = 66
if age < 4:print(f"小明今年{age}岁,他的门票是免费的。");
elif 4 < age < 18:print(f"小明今年{age}岁,他的门票是200块钱的。");
elif age > 65:print(f"小明今年{age}岁,他的门票是126块钱的。");
else是一条包罗万象的语句,只要不满足任何if或elif中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个elif代码块来代替else代码块。这样,你就可以肯定,仅当满足相应的条件时,你的代码才会执行。
5.3.6 测试多个条件
if-elif-else结构功能强大,但仅适合用于只有一个条件满足的情况:遇到通过了的测试后,Python就跳过余下的测试。这种行为很好,效率很高,让你能够测试一个特定的条件。
然而,有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含elif和else代码块的简单if语句。在可能有多个条件为True,且你需要在每个条件为True时都采取相应措施时,适合使用这种方法。
#定义一个列表
color = ['Green','Red','Purple','Orange','Blue','predict']
if 'Alice' in color:print(f"Alice 在列表color中。");
if 'Stock' not in color:color.append('Stock');
if 'Smith' in color:print(f"Smith 在列表color中。");
if 'Purple' in color:print(f"Purple 在列表color中。")
print(color);#输出结果:
Purple 在列表color中。
['Green', 'Red', 'Purple', 'Orange', 'Blue', 'predict', 'Stock']
总之,如果你只想执行一个代码块,就使用if-elif-else结构;如果要运行多个代码块,就使用一系列独立的if语句。
以上的内容,是本人自学Python,写的笔记,如有错误,请留言哦!!!本人会在第一时间及时更正。如果你觉得有用,请关注我,一起学习Python,一起高薪!!