系列文章目录
第一章 起步
第二章 变量和简单数据类型
第三章 列表简介
第四章 操作列表
第五章 if 语句
第六章 字典
第七章 用户输入和 while 语句
第八章 函数
第九章 类
第十章 文章和异常
第十一章 测试代码
前言
编程时经常会需要检查一系列条件,并据此决定采取什么措施。在 Python 中,if 语句会让你能够检查程序的当前状态,并采取相应的措施。
5.1 一个简单示例
假设你只想在汽车列表中大写打印 ‘bmw’ , 其他汽车名正常打印:
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())
输出为
Audi
BMW
Subaru
Toyota
这个示例涵盖了本章将介绍的很多概念。下面先来介绍可用来在程序中检查条件的测试。
5.2 条件测试
每条 if 语句的核心都是一个值为 True 或 False 的表达式,这种表达式称为 条件测试。Python 根据条件测试的值为True 还是 False 来决定是否执行 if 语句中的代码。
5.2.1 检查是否相等
最简单也是最常见的条件测试就是判断一个变量是否同一特定值相等,就像上面例子一样
一个等号是陈述,是赋值用的;两个等号是发问,是判断用的(car 是 bmw 吗?是的话返回 True ,if 语句执行,不是的话,返回 False ,反之不执行)
5.2.2 检查是否相等时忽略大小写
Python 特别严格,但凡同一个单词中有一个字母大小写不同,它也会认定这是两个不同的字符串。如果你的程序中,大小写很重要,那么这种行为肯定时省心的;但如果大小写无关紧要,只想检查变量的值,那么可将变量的值转换为小写,再进行比较
5.2.3 检查是否不相等
要判断两个值是否不相等,可结合惊叹号和等号( != ),其中的惊叹号表示不,其他很多编程语言中也是如此。
5.2.4 数值比较
条件语句中可包含各种数学比较,如小于、大于、大于等于。这样的好处是能够直接检查关心的条件。
5.2.5 检查多个条件
你可能想同时检查多个条件。例如,有时候需要在两个条件都为 True 时才执行相应的操作,而有时候只要求一个条件为 True 即可。在这些情况下,关键字 and 和 or 可助你一臂之力。
- 使用 and 检查多个条件:
(age_1 >= 21) and (age_2 <= 17)
(括号只是为了提高可读性)在这里,只有两个条件都满足才会返回 True。 - 使用 or 检查多个情况:
(age_1 >= 21) or (age_2 <= 17)
(括号只是为了提高可读性)在这里,只要有一个条件满足就会返回 True。
5.2.6检查特定值是否包含在列表中
要判断特定的值是否已包含在列表中,可使用关键字 in 。
things_in_room = ['book', 'bad', 'char']
if 'book' in things_in_room:
print("The book in the room.")
if 'pen' in things_in_room:
print("YES")
else:
print("Oh,NO!")
输出为
The book in the room.
Oh,NO!
5.2.7 检查特定值是否不包含在列表中
当然还是一个关键字:not in
5.2.8 布尔表达式
随着你对编程的了解越来越深入,你将遇到术语布尔表达式,其实它只不过是条件测试的别名。与条件表达式一样,布尔表达式的结果要么为 True ,要么是 False 。
布尔值通常用于记录条件,如游戏是否在运行,或者用户是否可以编辑网站的特定内容:
game_active = True
can_edit = False
在跟踪程序状态或程序中重要的条件方面,布尔值提供了一种高效方式,这在以后会慢慢了解的。
5.3 if 语句
5.3.1 简单的 if 语句
最简单的 if 语句只有一个测试和一个操作:
if conditional_test:
do something
第一行包含任何条件测试,而在紧跟在测试后面的缩进代码中,可执行任何操作。如果条件测试的结果为 True,Python 就会执行紧跟在 if 后面的代码,否则 Python 将忽略这些代码。
5.3.2 if-else 语句
我们经常需要在条件测试通过时执行一个操作,在没有通过条件测试时执行另一个操作。在这种情况下,可使用 Python 提供的 if-else 语句。if-else 语句块类似于简单的 if 语句,但其中的 else 语句让你能够指定条件测试未通过时要执行的操作。
5.3.3 if-leif-else 结构
我们经常需要检查超过两个的情形,为此可以使用 Python 提供的 if-leif-else 结构。Python 只执行此结构中的一个代码块:它以此检查每个条件测试,直到遇到通过了的条件测试,测试通过后,Python 将执行紧跟在其后的代码块并跳过余下的测试。
在现实世界中,很多情况都需要考虑多个情形。例如一个根据年龄段收费的游乐场:
- 4 岁以下免费
- 4 ~ 18 岁收 50 元
- 18 岁(含)以上收费 120 元
如果只使用一条 if 语句,该如何确定门票价格呢?
age = 12
if age < 4:
cost = 0
elif age < 18:
cost = 50
else:
cost = 120
print(cost)
# 当然,输出为 50
5.3.4 使用多个 elif 代码块
可根据需要使用任意数量的 elif 代码块,例如,假设前述游乐场要给老年人打折呢?是吧。
5.3.5 省略 else 代码块
Python 并不要求 if-elif 结构后面必须有 else 代码块。在有些情况下,else 代码块确实可以省去很多事情;而在其他一些情况下,最后使用一条 elif 语句来处理特定的情形而更清晰(因为这样到又提到了最后一个测试条件嘛)
5.3.6 测试多个条件
if-elif-else 结构功能强大,但仅适合用于只有一个条件满足的情况,这种高效行为只能够测试一个特定的条件。然而有时候必须检查你关心的所有条件,在这种情况下,应使用一系列不包含 elif 和 else 代码块的简单 if 语句。
动手试一试
# 练习 5-3:外星人的颜色
alien_color = 'green'
if alien_color == 'green':
print("You get 5 fraction.")
else:
print("You haven't any fraction.")
# 练习 5-6:人生的不同阶段
age = 19
if age < 2:
print("This people is a baby.")
elif age < 4:
print("This people is a toddler.")
elif age < 13:
print("This people is a child.")
elif age < 20:
print("This people is a teenager.")
elif age < 65:
print("This people is a adut.")
else:
print("This people is a old people.")
# 练习 5-7:喜欢的水果
favorite_fruits = ["apple", "watermelon", "banana"]
if "orange" in favorite_fruits:
print("You really like orange!")
if "apple" in favorite_fruits:
print("You really like apple!")
if "watermelon" in favorite_fruits:
print("You really like watermelon!")
if "banana" in favorite_fruits:
print("You really like banana!")
if "grape" in favorite_fruits:
print("You really like grape!")
输出为
You get 5 fraction.
This people is a teenager.
You really like apple!
You really like watermelon!
You really like banana!
5.4 使用 if 语句处理列表
5.4.1 检查特殊元素
在使用 for 循环打印列表各个元素时,可以使用 if 语句来挑选出特殊元素。
5.4.2 确定列表不是空的
在运行 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 plian pizza?")
5.4.3 使用多个列表
在上述例子中,顾客的要求往往五花八门,在比萨配料方面更是如此,那我们可以使用比萨店配料和顾客预期配料两个列表来完成:
availaable_toopings = ["mushrooms", "olives", "green peppers",
"pepperoni", "pineapple", "extra cheese"]
requested_toppings = ["mushrooms", "frech fries", "extra cheese"]
for requested_topping in requested_toppings:
if requested_topping in availaable_toopings:
print(f"Adding {requested_topping}.")
else:
print("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!
看哪!我们通过为数不多的几行代码就高效地处理了一种真实的情形!
动手试一试
# 练习 5-11:序数
bases = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for base in bases:
if base == 1:
print(f"{base}st")
elif base == 2:
print(f"{base}nd")
elif base == 3:
print(f"{base}rd")
else:
print(f"{base}th")
输出为
1st
2nd
3rd
4th
5th
6th
7th
8th
9th
5.5 设置 if 语句的格式
本章的每个示例都展示了良好的格式设置习惯。在条件测试的格式设置方面,PEP 8 提供的唯一建议时,在诸如 ==,>= 和 <= 等比较运算符两边各添加一个空格。例如:if age < 4
要比 if age<4
更好。这样的空格不会影响 Python 对代码的理解,而只是让代码阅读起来更容易。
总结
在本章中,你学习了:
- 如何编写简单的if语句、if-else语句和if-elif-else结构,并可以使用这些结构来测定特定的条件;
- 如何在利用高效的for循环的同时,以不同于其他元素的方式对特定的列表元素进行处理;
- 确保复杂代码良好可读性。
下一章,开始学习 Python 字典,我们要将不同的信息关联在一起处理咯!