本节目录
一个简单的示例
有一个汽车列表,想将其中每辆汽车的名称打印出来。对于大多数汽车,应以首字母大写的方式打印其名称,但是汽车名 ‘bmw’ 应以全大写的方式打印。
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())
输出:
Audi
BMW
Subaru
Toyota
条件测试
每条 if 语句的核心都是一个值为 True 或 False 的表达式,这种表达式称为条件测试。
这个叫法很重要,因为你经常要检查条件测试是否为 True,这将决定是否执行 if 语句中的代码。
检查是否相等
最简单的条件测试检查变量的值是否与特定值相等。
使用两个等号(==)检查是否相等。
这个相等运算符在它两边的值相等时返回 True,否则返回 False。
>>> car = 'bmw'
>>> car == 'bmw'
True
我们来看一下上面的代码。首先,我们将变量 car 的值设置为 ‘bmw’。然后,我们检查变量 car 的值是否为 ‘bmw’。如果是,Python 返回 True;如果不是,Python 返回 False。
>>> car = 'audi'
>>> car == 'bmw'
False
上面的代码,变量 car 的值为 ‘audi’,因此条件测试的值为 False。
检查是否相等时不考虑大小写
在Python中检查是否相等时区分大小写。例如,两个大小写不同的值会被视为不相等。
>>> car = 'Audi'
>>> car == 'audi'
False
在这个示例中,变量 car 的值为 ‘Audi’,因此条件测试的值为 False。
可先将变量的值转换为全小写的,再进行比较。
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
检查是否不相等
要判断两个值是否不相等,可结合使用惊叹号和等号(!=),其中的惊叹号表示不。
下面使用一条 if 语句来演示如何使用不等运算符。
#我们将把顾客点的比萨配料(topping)存储在一个变量中,再打印一条消息,指出这名顾客点的配料是否是意式小银鱼(anchovies)
requested_topping = 'mushrooms'
if requested_topping != 'anchovies':
print("Hold the anchovies!")
输出:
Hold the anchovies!
如果这两个值不等,Python 将返回 True,进而执行紧跟在 if 语句后面的代码;如果相等,Python 将返回 False,不执行紧跟在 if 语句后面的代码。
比较数字
条件语句中可包含各种数学比较,如小于、小于等于、大于、大于等于。
>>> age = 19
>>> age < 21
True
>>> age <= 21
True
>>> age > 21
False
>>> age >= 21
False
你可以将数字与数字比较,如下所示:
>>> age = 18
>>> age == 18
True
answer = 17
if answer != 42:
print("That is not the correct answer. Please try again!")
# answer 的值(17)不是神秘数42,条件得到满足,因此缩进的代码行得以执行
检查多个条件
1.使用 and 检查多个条件
要检查是否两个条件都为 True,可使用关键字 and 将两个条件测试合而为一;如果每个测试都通过了,整个表达式就为 True;如果至少有一个测试没有通过,整个表达式就为 False。
下面使用 and 来检查两个条件。
age_0 = 22
age_1 = 18
age_0 >= 21 and age_1 >= 21
输出:
False
为了改善可读性,可将每个条件测试都分别放在一对括号内。
(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
检查特定的值是否在列表中
这个内容在实际的项目开发中会经常用到。
要判断特定的值是否已包含在列表中,可使用关键字 in。
requested_toppings = ['mushrooms', 'onions', 'pineapple']
'mushrooms' in requested_toppings
输出:
True
关键字 in 让 Python 检查列表中是否包含特定的值。如果特定的值位于列表中,Python 返回 True;如果不在,Python 返回 False。
检查特定的值是否不在列表中
有时候,你需要检查特定的值是否不包含在列表中。在这种情况下,可使用关键字 not in。
# banned_users.py
banned_users = ['andrew', 'carolina', 'david']
user = 'marie'
if user not in banned_users:
print(f"{user.title()}, you can post a response if you wish.")
输出:
Marie, you can post a response if you wish.
在这个示例中,我们将 banned_users 列表中的名字都存储到变量 user 中。如果 user 不在列表 banned_users 中,Python 返回 True,进而执行 if 语句后面的代码。
布尔表达式
条件测试的别名是布尔表达式,它是一个值为 True 或 False 的表达式,这种表达式在条件测试中经常使用。
布尔值通常用于记录条件,例如游戏是否正在运行,或用户是否可以编辑网站的特定内容。
game_active = True
can_edit = False
if 语句
简单的 if 语句
最简单的 if 语句只有一个测试和一个操作。
if conditional_test:
do something
第一行可包含任意条件测试,而在紧跟在测试后面的缩进代码块中,可执行任意操作。
# 假设有一个表示某个人年龄的变量,而你想知道这个人是否到了投票的年龄
age = 19
if age >= 18:
print("You are old enough to vote!")
print("Have you registered to vote yet?")
输出:
You are old enough to vote!
Have you registered to vote yet?
条件测试通过了,而且两个函数调用 print() 语句都缩进了
if-else 语句
经常需要在条件测试通过了时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用 Python 提供的 if-else 语句。if-else 语句块类似于简单的 if 语句,但其中的 else 语句让你能够指定条件测试未通过时要执行的操作。
if conditional_test:
do something
else:
do something else
在 if-else 语句中,条件测试的结果为 True 时将执行 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!
if-elif-else 语句
经常需要检查超过两个的情形,为此可使用 Python 提供的 if-elif-else 结构。Python 只执行 if-elif-else 结构中的一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,Python 将执行紧跟在它后面的代码,并跳过余下的测试。
if conditional_test:
do something
elif conditional_test:
do something else
else:
do something else
下面来看一个示例,其中包含多个 elif 代码块。
# 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.
在这个示例中,Python 只执行一个代码块,它依次检查每个条件测试,直到遇到通过了的条件测试。在这个示例中,Python 只执行一个代码块,即 elif 代码块,其中的条件测试为 True。Python 执行完相应的代码后,跳过余下的测试。
为了让代码更简洁,可不在 if-elif-else 代码块中打印门票价格,而是只在其中设置门票价格,并在它后面添加一个函数调用 print():
# amusement_park.py
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
else:
price = 10
print(f"Your admission cost is ${price}.")
输出:
Your admission cost is $5.
使用多个 elif 代码块
可根据需要使用任意数量的 elif 代码块。例如,下面的代码还检查了顾客的年龄,但根据年龄段收费:
# amusement_park.py
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65: # 注意,这里是 elif 而不是 if
price = 10
else:
price = 5
print(f"Your admission cost is ${price}.")
输出:
Your admission cost is $5.
省略 else 代码块
Python 并不要求 if-elif 结构后面必须有 else 代码块。在有些情况下,else 代码块很有用;而在其他一些情况下,使用一条 elif 语句来处理特定的情形更清晰。
age = 12
if age < 4:
price = 0
elif age < 18:
price = 25
elif age < 65:
price = 40
elif age >= 65:
price = 20
print(f"Your admission cost is ${price}.")
测试多个条件
# toppings.py
# 首先创建一个列表,其中包含顾客点的配料
requested_toppings = ['mushrooms', 'extra cheese']
# 第一条 if 语句检查顾客是否点了配料蘑菇(mushrooms)
if 'mushrooms' in requested_toppings:
# 如果点了,就打印一条确认消息。
print("Adding mushrooms.")
# 检查配料辣香肠(pepperoni)的代码也是一条简单的 if 语句。
# 因此不管前一个条件测试是否通过,都将执行这个测试。
if 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
# 最后一条 if 语句检查顾客是否要求多加芝士(extra cheese)
# 不管前两个条件测试的结果如何,都会执行这些代码。
if 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
# 每当这个程序运行时,都会执行这三个独立的条件测试。
print("\nFinished making your pizza!")
输出:
Adding mushrooms.
Adding extra cheese.
Finished making your pizza!
将上文的代码改成if-elif-else 语句,代码将不能正确运行。
requested_toppings = ['mushrooms', 'extra cheese']
# 第一个条件测试检查列表中是否包含 'mushrooms'。
if 'mushrooms' in requested_toppings:
# 它通过了,因此将在比萨中添加蘑菇。
print("Adding mushrooms.")
elif 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
elif 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
# 然而,Python 将跳过 if-elif-else 语句中余下的条件测试,不再检查列表中是否包含 'extra cheese' 和 'pepperoni'。结果就是,只会添加顾客点的第一种配料,不会添加其他配料
print("\nFinished making your pizza!")
输出:
Adding mushrooms.
Finished making your pizza!
如果只想运行一个代码块,就使用 if-elif-else 语句;如果要运行多个代码块,就使用一系列独立的 if 语句。
使用 if 语句处理列表
检查特殊元素
在 for 循环中,可对每个元素执行任何操作。但是,在 for 循环中,可对特殊元素执行特定的操作。
沿用上一节的代码
这家比萨店在制作比萨时,每添加一种配料都打印一条消息。要以极高的效率编写这样的代码,可以创建一个包含顾客所点配料的列表,并使用一个循环来指出添加到比萨中的配料
# 创建一个包含顾客所点配料的列表
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
# 使用一个循环来指出添加到比萨中的配料
for requested_topping in requested_toppings:
print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")
输出:
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 语句检查顾客点的是否是青椒。
if requested_topping == 'green peppers':
# 如果是,就显示一条消息,指出不能点青椒的原因。
print("Sorry, we are out of green peppers right now.")
else:
# else 代码块确保其他配料都将被添加到比萨中。
print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")
输出:
Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!
确认列表非空
在运行 for 循环前确定列表非空很重要。
下面在制作比萨前检查顾客点的配料列表是否为空。如果列表为空,就向顾客确认是否要点原味比萨(plain pizza);如果列表非空,就像前面的示例那样制作比萨。
在 if 语句中将列表名用作条件表达式时,Python 将在列表至少包含一个元素时返回 True,在列表为空时返回 False
# 首先创建一个空列表,其中不包含任何配料。
requested_toppings = []
# 然后进行简单的检查,而不是直接执行 for 循环。
if requested_toppings:
# 如果 requested_toppings 非空,就运行与前一个示例相同的 for 循环
for requested_topping in requested_toppings:
print(f"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?
对于数值 0、空值 None、单引号空字符串 ‘’、双引号空字符串 “”、空列表 []、空元组 ()、空字典 {},Python 都会返回 False。
使用多个列表
顾客的要求五花八门,在比萨配料方面尤其如此。如果顾客要在比萨中添加炸薯条(French fries),该怎么办呢?可以使用列表和 if 语句来确定能否满足顾客的要求。
# 第一个包含比萨店供应的配料
# 如果比萨店供应的配料是固定的,也可以使用一个元组来存储它们
available_toppings = ['mushrooms', 'olives', 'green peppers',
'pepperoni', 'pineapple', 'extra cheese']
# 第二个则包含顾客点的配料
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
# 这次对于 requested_toppings 中的每个元素,都先检查它是否是比萨店供应的配料,再决定是否在比萨中添加它
for requested_topping in requested_toppings:
if requested_topping in available_toppings:
print(f"Adding {requested_topping}.")
else:
print(f"Sorry, we don't have {requested_topping}.")
print("\nFinished making your pizza!")
设置 if 语句的格式
在诸如 ==、>= 和 <= 等比较运算符两边各添加一个空格。
age = 19
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 10
elif age >= 65:
price = 5
往期内容
- Python3完全新手小白的学习手册 4 操作列表
- Python3完全新手小白的学习手册 3 列表
- Python3完全新手小白的学习手册 2 变量和简单数据类型
- Python3完全新手小白的学习手册 1 Python 的安装
1148

被折叠的 条评论
为什么被折叠?



