if语句(python)
在编程时经常需要检查一系列条件,并据此决定采取什么措施。在python中,if语句让你能够检查程序的当前状态,并采取相应的措施。
一个简单示例
对于大多数汽车,应以首字母大写的方式打印其名称,但对于汽车名‘bmw’,应以全大写的方式打印:
>>> cars = ['audi', 'bmw', 'subaru', 'toyota']
>>> for car in cars:
>>> if car == 'bmw':
>>> print(car.upper())
>>> else:
>>> print(car.title())
条件测试
每条if语句的核心都是一个值为True或False的表达式,这种表达式称为条件测试 。python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,python就执行紧跟在if语句后面的代码;如果为False,python就忽略这些代码。
检查是否相等
大多数条件测试将一个变量的当前值同特定值进行比较。最简单的条件测试检查变量的值是否与特定值相等:
>>> car = 'bmw'
>>> car == 'bmw'
True
>>> car = 'audi'
>>> car == 'bmw'
False
一个等号是陈述,两个等号则是发问。
检查是否相等时大小时忽略大小写
在python中检查是否相等时区分大小写。例如,两个大小写不同的值被视为不相等:
>>> car = 'Audi'
>>> car == 'audi'
False
如果大小写不重要,这种行为有其优点。但如果大小写无关紧要,只想检查变量的值,可将变量的值转换为小写,再进行比较:
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
检查是否不相等
要判断两个值是否不等,可结合使用惊叹号和等号(!=),其中惊叹号表示不:
>>> requested_topping = 'mushroom'
>>> if requested_topping != 'anchovies':
>>> print("Hold the anchovies")
Hold the anchovies.
数值比较
检查数值非常简单。例如,下面的代码检查一个人是否是18岁:
>>> age = 18
>>> age == 18
True
还可检查两个数是否相等:
>>> answer = 17
>>> if age != 42:
>>> print("That is not the correct answer. Please try again!")
That is not the correct answer. Please try again!
条件语句中可包含各类数学比较,如小于、小于等于、大于、大于等于:
>>> age = 19
>>> age < 21
True
>>> age <= 21
True
>>> age > 21
False
>>> age >= 21
False
检查多个条件
你可能想同时检查多个条件。例如,有时候需要再两个条件都为True时才执行相应的操作,而有时候只要求一个条件为True。在这些情况下,关键字and和or可助你一臂之力。 1. 使用and检查多个条件 要检查是否两个条件都为True,可使用关键字and将两个条件测试合而为一。如果每个测试都通过了,整个表达式就为True;如果至少一个测试没通过,整个表达式就为False。 例如,要检查是否两个人都不小于21岁,可使用下面的测试:
>>> 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
检查特定值是否包含在列表中
有时候,执行操作前必须检查列表是否包含特定的值。例如,结束用户的注册过程前,可能需要检查他提供的用户名是否已包含在用户名列表中。 要判断特定的值是否包含在列表中,可用关键词in :
>>> requested_toppings = ['mushroom', 'onions', 'pineapple']
>>> 'mushroom' in requested_toppings
True
>>> 'pepperoni' in requested_toppings
False
检查特定值是否不包含在列表中
还有些时候,确定特定的值未包含在列表中很重要:
>>> 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.
布尔表达式
随着你对编程的了解越来越深入,将遇到术语布尔表达式,它不过是条件测试 的别名。与条件表达式一样,布尔表达式的结果要么为True,要么为False。 布尔通常用于记录条件,如游戏是否正在运行,或者用户是否可以编辑网站的特定内容:
game_active = True
can_edit = False
在跟踪状态或程序中重要的条件方面,布尔值提供了一种高效的方式。
if语句
理解条件测试后,就可以开始编写if语句了。if语句有很多种,选择使用哪种取决于要测试的条件数。
简单的 if 语句
最简单的if语句只有一个测试和一个操作:
if conditional_test:
do something
if-else 语句
我们经常需要在条件测试通过时执行一个操作,在没有通过时执行另一个操作。在这种情况下,可使用python提供的 if-else 语句。if-else 语句块类似于简单的 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-else 结构非常适合用于让python执行两种操作之一的情形。在这样简单的 if-else 结构中,总是会执行两个操作中的一个。
if-elif-else 结构
我们经常需要检查超过两个的情形,为此可使用python提供的 if-elif-else 结构,python只执行 if-elif-else 结构中的一个代码块。它一次检查每个条件测试,指导遇到通过了的条件测试。测试通过后,python将执行紧跟在它后面的代码,并跳过余下的测试 。比如门票价格的确定:
>>> age = 12
>>> if age < 4:
>>> print("Your admission cost is $0.")
>>> elif age < 18:
>>> print("Your admission cost is $25.")
>>> else:
>>> print("Your admission cost is $40.")
Your admission cost is $25.
为了让代码更简洁,可不在 if-elif-else 代码块中打印门票价格,而只在其中设置门票价格,并在它后面添加一个简单的函数调用 print():
>>> age = 12
>>> if age < 4:
>>> price = 0
>>> elif age < 18:
>>> price = 25
>>> else:
>>> price = 40
>>> print(f"Your admission cost is ${price}.")
Your admission cost is 25.
使用多个elif 代码块
可根据需要使用任意数量的 elif 代码块:
>>> age = 2
>>> 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}.")
Your admission cost is $25.
省略 else 模块
python并不要求 if-elif 结构后必须有else代码块。在有些情况下,else代码块很有用;而在其他一些情况下,使用一条elif语句来处理特定的情形更清晰:
>>> age = 12
>>> if age < 4:
>>> price = 0
>>> elif age < 18:
>>> price = 25
>>> elif age < 65:
>>> price = 40
>>> elife age >= 65:
>>> price = 20
>>> print(f"Your admission cost is ${price}.")
Your admission cost is $25.
最后的 else 换成 elif ,这比使用 else 代码块更清晰写。经过这样的修改后,每个代码块都仅在通过了相应的测试时才会执行。 else 是一个包罗万象的语句,只要不满足任何 if 或 else 中的条件测试,其中的代码就会执行。这可能引入无效甚至恶意的数据。如果知道最终要测试的条件 ,应考虑使用一个elif 代码块来代替 else 代码块 。这样就可以肯定,仅当满足相应的条件时,代码才会执行。
测试多个条件
if-elif-else 结构功能强大,但仅适合用于只有一个条件满足 的情况:遇到通过了的测试后,python 就跳过余下的测试。这种行为很好,效率很高,让你能够测试一个特定的条件。 然而,有时候必须检查你关心的所有条件。在这种情况下,应使用一系列不包含 elif 和 else 代码块的简单 if 语句。在可能有多个条件为 True 且需要在每个条件为 True 时都采取相应措施时,适合使用这种方法:
>>> requested_toppings = ['mushroom', 'extra cheese']
>>> if 'mushroom' in requested_toppings:
>>> print("Adding mushroom.")
>>> if 'pepperoni' in requested_toppings:
>>> print("Adding pepperoni.")
>>> if 'extra cheese' in requested_toppings:
>>> print("Adding extra cheese.")
>>> print("\nFinished making your pizza!")
Adding mushroom.
Adding extra cheese.
Finished making your pizza!
如果像下面这样转而使用 if-elif-else 结构,代码将不能正确运行,因为有一个测试通过之后,就会跳过余下的测试:
>>> requested_toppings = ['mushroom', 'extra cheese']
>>> if 'mushroom' in requested_toppings:
>>> print("Adding mushroom.")
>>> elif 'pepperoni' in requested_toppings:
>>> print("Adding pepperoni.")
>>> elif 'extra cheese' in requested_toppings:
>>> print("Adding extra cheese.")
>>> print("\nFinished making your pizza!")
Adding mushroom.
Finished making your pizza!
总之,如果只想执行一个代码块,就使用 if-elif-else 结构;如果要执行多个代码块,就是用一系列独立的if结构。
使用 if 语句处理列表
检查特殊元素
>>> requested_toppings = ['mushroom', 'green pepers', 'extra cheese']
>>> for requested_topping in requested_toppings:
>>> print(f"Adding {requested_topping}")
>>> print("\nFinished making your pizza!")
Adding mushroom.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!
输出很简单,因为这就是一个简单的 for 循环。然而,如果披萨店的青椒用完了,该如何处理?为妥善地处理这种情况,可在 for 循环中包含一条 if 语句:
>>> requested_toppings = ['mushroom', 'green peppers', 'extra cheese']
>>> for requested_topping in requested_toppings:
>>> if requested_topping == 'green peppers':
>>> print("Sorry, we are out of green peppers right now.")
>>> else:
>>> print(f"Adding {requested_topping}")
>>> print("\nFinished making your pizza!")
Adding mushroom.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished 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?")
Are you sure you want a plain pizza?
在 if 语句中将列表名用作条件表达式时,python 将在列表至少包含一个元素时返回True,并在列表为空时返回False 。如果 requested_toppings 不为空,就运行与前一个示例相同的 for 循环;否则,就打印一条消息,询问顾客是否确实要点不加任何配料的原味披萨。
使用多个列表
>>> 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_toppings}.")
>>> else:
>>> print(f"Sorry, we don't have {requested_topping}.")
>>> print("\nFinished making your pizza!")
Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.
Finished making your pizza!
|