下面是一个简短的示例,演示了如何使用if语句来正确地处理特殊情形。如下所示:
cars = ["audi","bmw","subaru","toyota"]
for car in acrs:
if car == "bmw":
print(car.upper())
else:
print(cat.title())
这个示例中的循环首先检查当前的汽车名是否是“bmw”,如果是就以全大写方式打印,否则就以首字母大写的方式打印。
每条if语句的核心都是一个值为True或False的表达式,这种表达式称为条件测试。python根据条件测试的值为True还是False来决定是否执行 if 语句中的代码 ,如果条件测试的值为True,python就执行紧跟在 if 语句后面的代码;如果为False,python就忽略这些代码。
最简单的条件测试检查变量的值是否与特定值相等:
if car == "bmw":
这个相等运算符在值两边相等时返回True,否则返回False。需要注意的是一个等号表示赋值,两个等号才是相等运算符,千万不要混淆。
在python中检查是否相等时区分大小写。例如:
car = "Audi"
if car =="audi":
# 结果
False
如果大小写很重要,这种行为有其优点。但如果大小写无关紧要,只想检查变量的值,可使用函数lower( ) 将变量的值转换为小写,再进行比较,如下:
car = "Audi"
if car.lower() == "audi":
# 结果
True
函数lower( )不会影响原来的变量:
print(car)
# 结果
car = "Audi"
要判断两个值是否不等,可结合使用感叹号和等号( != ),其中感叹号表示不,其他很多编程语言中也是如此。下面演示一下如何使用不等运算符:
requested_topping = "mushrooms"
if requested_topping != "anchovies":
print("hold the anchovies")
你编写的大多数条件表达式检查两个值是否相等,但有时候检查两个值是否不等的效率更高。
条件语句中可包含各种数学比较,如小于、小于等于、大于、大于等于。如下所示:
age = 19
if age<21:
print("1 is yes")
if age<=21:
print("2 is yes")
if age>21:
print("3 is yes")
if age>=21:
print("4 is yes")
你可能想同时检查多个条件。例如,有时候需要在两个条件都为True时才执行相应的操作,而有时候只要求一个条件为True。在这些情况下,关键字and和or可发挥作用。例如,要检查是否2个人都不小于21岁,可使用下面的测试:
age_0 = 22
age_1 = 23
if age_0>=21 and age_1>=21:
print("都正确")
# 为改善可读性,可将每个测试分别放在一对圆括号内,但不是必须这样做
# if (age_0>=21) and (age_1>=21):
关键字or能够让你检查多个条件,但只要有一个条件满足,就能够通过整个条件测试。仅当两个测试都没通过时,使用or的表达式才为False。
age_0 = 22
age_1 = 18
if age_0>=21 or age_1>=21:
print("正确")
有时候,执行操作前必须检查列表是否包含特定的值。例如,在用户注册账户时可能需要检查他所提供的用户名是否已包含在用户名列表中。要判断特定的值是否已包含在列表中,可使用关键字in。如下:
requested_toppings = ["mushrooms","onions","pineapple"]
if "mushrooms" in requested_toppings:
print("正确")
这种技术很有用,让你能够在创建一个列表后,轻松的检查其中是否包含特定的值。还有些时候,需要确定特定的值未包含在列表中。在这种情况下,可使用关键字not in。例如:
banned_users = ["andrew","carolina","david"]
user = "marie"
if user not in banned_users:
print("you can see something")
随着你对编程的越来越深入了解,将遇到术语布尔(bool)表达式,它是条件测试的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。布尔值常用于记录条件,如游戏是否正在运行:
game_active = True
在跟踪程序状态或程序中重要的条件方面,布尔值提供了一种高效的方式。
理解条件测试后,就可以开始编写 if 语句了。if 语句有很多种,选择使用哪种取决于要测试的条件数。
最简单的 if 语句只有一个测试和一个操作:
if conditional_test:
do something
# 示例
age = 10
if age <20:
print(age)
第一行可包含任何条件测试,而在紧跟测试条件后面的缩进代码中,可执行任何操作。如果条件测试结果为True,python就会执行紧跟在 if 语句后面的代码,否则python将忽略这些代码。在 if 语句中,缩进的作用与在for循环中相同。如果测试通过了,将执行 if 语句后面所有缩进的代码行,否则将忽略它们。
age = 19
if age >= 18:
print("you are old enough to vote")
print("you want to vote who")
我们经常需要在条件测试通过时执行一个操作,在没有通过时执行另一个操作。在这种情况下,可使用 if - else 语句。该语句块类似于简单的 if 语句,但其中的 else 语句让你能够指定条件测试未通过时要执行的操作。如下:
age = 17
if age >= 18:
print("you can vote")
else:
print("you can not vote")
if - else 结构非常适合用于让python执行两种操作之一的情形。在这样的结构中,总是会执行两个操作中的一个。
我们经常需要检查超过两个的情形,为此可使用python提供的 if - elif - else 结构。python只执行该结构中的一个代码块。它依次检查每个条件测试,直到遇到通过了的条件测试。测试通过后,python将执行紧跟在它后面的代码,并跳过余下的测试。例如一个根据年龄段收费的游乐场:
age = 12
if age < 4:
price = 0
elif age <18:
price = 25
else:
price =40
print(f"your admission cost is {price}")
可根据需要使用任意数量的elif代码块。
age = 12
if age <4:
price = 0
elif age <18:
price = 25
elif age <65:
price = 40
else:
price = 20
print(f"your admission cost is {price}")
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}")
else 是一条包罗万象的语句,只要不满足任何 if 或 elif 中的条件测试,其中的代码就会执行。这可能引来无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个 elif 代码块来代替 else 代码块。这样就可以肯定,仅当满足相应的条件时,代码才会执行。
if - elif - else 结构功能强大,但仅适用于只有一个条件满足的情况:遇到通过了的测试后,python就跳过余下的测试。这种行为效率很高,让你能够测试一个特定的条件。然而有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含 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 语句。
通过结合使用 if 语句和列表,可完成一些有趣的任务:对列表中特定的值做特殊处理;高效的管理不断变化的情形。
继续使用前面的披萨店示例。这家店在制作披萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到披萨中的配料,能以极高的效率编写这样的代码:
requested_toppings = ["mushrooms","green peppers","extra cheese"]
for requested_topping in requested_toppings:
print(f"adding {requested_topping}")
print("\nFinished 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 now")
else:
print(f"adding {requested_topping}")
print("\nFinished making your pizza")
检查顾客是否点了青椒,如果是就显示不能点青椒的原因,如果不是青椒,就添加到披萨中。
到目前为止,我们对于处理的每个列表都做了一个简单的假设,即它们至少都包含一个元素。有鉴于此,在运行for循环前确定列表是否为空很重要。
requested_toppings = [ ]
if requested_toppings:
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?")
在 if 语句将列表名用作条件表达式时,python将在列表至少包含一个元素时返回True,并在列表为空时返回False。
顾客的要求往往五花八门,如果顾客要在披萨中添加炸薯条,该怎么办呢?可使用列表和 if 语句来确定能否满足顾客的要求。
# 第一个列表表示披萨店提供的配料,第二个列表表示顾客点的配料
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(f"adding {requested_topping}")
else:
print("sorry, we are out of {requested_topping} now")
print("\nFinished making your pizza")
在条件测试的格式设置方面,PEP 8提供的唯一建议是在诸如相等运算符、大于等于运算符和小于等于运算符等比较运算符两边各添加一个空格。例如:
if age < 4:
if age<4:
上面的代码比下面的代码更为美观,阅读起来也更为容易。