编程时经常需要检查一系列的条件,并据此决定采取什么措施。在python中,if语句让能够检查程序的当前状态,并据此采取相应的措施。
fruits = ["apple","banana","pear"]
for fruit in fruits:
if fruit == "apple":
print (fruit.upper())
else:
print (fruit.title())
结果
APPLE
Banana
Pear
在这个示例中循环检查当前的水果名称是否是"apple",如果是,就以全大写的方式打印它。否则就以首字母大写的方式打印。
每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,Python就执行紧跟在if语句后面的代码。如果为False,Python就忽略这些代码。
大多数条件测试都将一个变量的当前值同特定的值进行比较。最简单的条件测试检查变量的值是否与特定的值相等。
fruit = "apple"
print (fruit == "apple")
结果
True
使用两个等号(==)检查fruit的值是否为"apple"。这个相等运算符在它两边的值相等时返回True,否则返回False。
一个等号是陈述,两个等号是发问。大多数编程语言使用等号的方式大都如此。
在Python中检查是否相等时区分大小写。
fruit = "apple"
print (fruit == "Apple")
结果
False
如果大小写很重要,这种行为是有优点的。但是如果大小写无关紧要,而只是想检查变量的值,可将变量的值转换为小写,再进行比较。
fruit = "Apple"
print (fruit.lower() == "apple")
结果
True
在今后的编程中,对变量的转换为大写或者小写转换之后进行比较。用到的是非常多的。
要判断两个值是否不相等,可结合使用叹号和等号(!=),其中叹号表示不,在很多编程语言中都是如此。
fruit = "Apple"
print (fruit.lower() != "apple")
结果
False
编写的大多数条件表达式都检查两个值是否相等,但有时候检查两个值是否不相等的效率更高。
检查数值是非常简单的。
age = 16
print (age == 16)
结果
True
条件语句中可包含各种数学比较,比如大于,大于等于,小于,小于等于
age = 16
print (age > 16)
print (age >= 16)
print (age < 16)
print (age <= 16)
结果
False
True
False
True
在if语句中可使用各种数字进行比较。
同时检查多个条件,有时候需要在两个条件都为True时才执行相应的操作,有时候只要求一个条件为True时就执行相应的操作。关键字and和or可以实现这一功能。
age = 16
name = "dana"
print (age > 20 and name == "dana")
结果
False
可以看到,第一个判断的位置是不满足的,第二个条件是满足的。and连接的两个判断,只有两个判断都满足整个表达式才会返回True。
age = 16
name = "dana"
print (age > 20 or name == "dana")
结果
True
or其中一个条件满足了,整个表达式就返回了true。
为了改善可读性,可将每个条件都分别放在一对括号内,但并非必须要这样做。
age = 16
name = "dana"
print ((age > 20) or (name == "dana"))
有时候,执行操作前必须检查列表是否包含特定的值。
要判断特定的值是否已包含在列表中,可使用关键字in。
fruits = ["apple","banana","pear"]
print ("apple" in fruits)
print ("strawberry" in fruits)
结果
True
False
这很有用,它让能够在创建一个列表后,轻松的检查其中是否包含特定的值。
布尔表达式,它不过是条件测试的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。
布尔值通常用于记录条件
active = True
在跟踪程序状态或者程序中重要的条件方面,布尔值提供了一种高效的方式。
if语句有很多种,选择哪种取决于要测试的条件数。
if conditional:
do something
在第一行代码中,可以包含任何条件测试,在紧跟在条件语句后面的夺金代码块中,可执行任何操作。如果条件为True,Python就会执行紧跟在if语句后面的代码。否则Python将忽略这些代码。
age = 18
if age >= 18:
print ("You are an adult")
结果
You are an adult
在if语句中,缩进的作用与for循环中相同。如果通过了,将执行if语句后面所有缩进的代码行,否则将忽略它们。
经常需要在条件通过时执行一个操作,并在没有通过的时候执行另一种操作。在这种情况下,可使用Python中的if-else语句。if-else语句块类似简单的if语句,但其中的else的语句能够指定条件未通过时要执行的操作。
age = 16
if age >= 18:
print ("You are an adult")
else:
print ("You are not an adult")
结果
You are not an adult
if-else结构非常适合用于让Python执行两种操作之一的情景。在这种简单的if-else结构中,总会执行两个操作中的一种。
经常需要判断超过两种情形,Python提供了if-elif-else结构。Python只执行if-elif-else结构中的代码块,它依次判定每一个条件,直到通过了的条件。条件通过后,Python将执行紧跟在它后面的代码,并跳过余下的条件。
score = 400
if score >= 500:
print ("You have passed the undergraduate line")
elif 500 > score >= 300:
print ("You have passed the undergraduate line but not the specialist line")
else:
print ("You didn't cross the specialty line")
结果
You have passed the undergraduate line but not the specialist line
可根据需要使用任意数量的elif代码块。
score = 299
if score >= 500:
print ("You have passed the undergraduate line")
elif 500 > score >= 300:
print ("You have passed the undergraduate line but not the specialist line")
elif 300 > score >= 100:
print ("You are admitted to the junior college")
else:
print ("You are not admitted")
结果
You are admitted to the junior college
Python并不要求if-elif结构后面必须有else代码块。在有些情况下,else代码块很有用。而在其它一些情况下,使用一条elif语句来处理特定的情形会更清晰。
age = 16
if age <= 18:
print ("You are a minor")
elif age > 60:
print ("You are an old man")
结果
You are a minor
else是一条包罗万象的语句,只要不满足任何if或elif中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。如果最终要测试的条件,应该考虑使用一个elif代码块来代替else代码块。
If-elif-else结构功能强大,但仅适合用于只有一个条件满足的情况
有时候必须检查关心的所有条件。在这种情况下,应使用一系列不包含elif和else代码块的简单if语句。
fruit = ["apple","pear"]
if "apple" in fruit:
print ("I like apple")
if "banana" in fruit:
print ("I like banana")
if "pear" in fruit:
print ("I like pear")
结果
I like apple
I like pear
fruit = ["apple","pear"]
if "apple" in fruit:
print ("I like apple")
elif "banana" in fruit:
print ("I like banana")
elif "pear" in fruit:
print ("I like pear")
结果
I like apple
总之,如果想执行一个代码块,就使用if-elif-else结构。如果要运行多个代码块,就使用一系列独立的if语句。
结合使用if语句和列表。
fruits = ["apple","pear","banana"]
for fruit in fruits:
if fruit == "apple":
print ("I don't like apple")
else:
print ("I like " + fruit)
结果
I don't like apple
I like pear
I like banana
在之前处理列表的时候都作了一个假设,那就是列表里面都是有元素的。现在假设列表是空的,没有任何一个元素,要循环处理列表中的数据,先判定列表中是否有元素是很重要的。因为在可能的情况下,为空要做一些其他的事情。
fruits = []
if fruits:
print ("The list is not empty")
else:
print ("The list is empty")
结果
The list is empty
Python将在列表至少包含一个元素的时候返回True,并在列表为空的时候返回False。
fruits = ['apple', 'banana', 'pear', 'strawberry']
like_fruits = ['apple', 'banana']
for fruit in fruits:
if fruit in like_fruits:
print ("I like " + fruit)
else:
print ("I don't like " + fruit)
结果
I like apple
I like banana
I don't like pear
I don't like strawberry