七天学会Python编程 -- 第三章 条件控制

3.1 if

条件控制是很常用的程序指令,拿我们常见的一种场景,去买高铁票,小孩是半票,一般是通过身高来判断,通常规则是低于1.5米半票,年龄小于2岁是免票,这种就是典型的条件控制。

Python 里用 if 来做这种判断,像上面的场景可以用这样的代码来处理

1
2
3
4
5
6
7
8
9
10
11
age = 10
height = 1.45
price = 50

if height < 1.5:
price = price * 0.5

if age < 2:
price = 0

print(price)

上面这段代码是先定义了 3 个变量,分别是年龄 age 是 10 岁,身高 height 是 1.45 米,高铁票原价 price 是 50 元。然后程序先判断身高,如果低于 1.5 米就把价格变为半价,用 price 乘以 0.5 后再赋予 price 变量,就是改变 price 的数据。然后程序再判断年龄,如果小于2岁就是免票,也就是票价为 0。最后把价格打印出来。

观察一下上面代码,我们能发现 if 指令的用法:if 后面是条件判断语句,后接冒号 ,接着下面的指令缩进了。这就是 if 的使用规则,缩进是很重要的概念,Python 用缩进来表示不同的程序块。比如 if 指令下面的缩进是属于 if 指令的程序块,也就是在 if 指令的条件判断成立时就会执行它的程序块,如果条件判断不成立就不会执行。

对于整个代码块来说,这个程序首先是一个大的程序块,代表整个程序,然后用 if 指令和对应的缩进形成小的程序块,多个小的程序块共同组成最大的程序块。程序块里可以有多行代码,只要保持相同的缩进就表示同一个程序块,例如下面这样:

1
2
3
if height < 1.5:
price = price * 0.5
print("Half price")

其中的

1
price = price * 0.5

1
print("Half price")

这两行属于同一个程序块,都是属于 if height < 1.5: 指令的。

Python 的这种缩进规则既属于语言语法,也属于排版风格。会使每个 Python 程序都看起来比较相像,不会像其他很多语言。代码排版风格往往多种多样,差异很大,让你阅读不同排版风格的代码,会比较困难。而代码大部分时间是用来阅读的,所以清晰一致的排版风格非常重要。另外,缩进是逐级进行的,例如:

1
2
3
def...
if...
print...

就像军衔一样,从元帅到上将、中将、少将再到后面的一等兵、二等兵……程序也是如此,逐级类推。

3.2 if … else

如果天气下雨你就打伞,如果不下雨就不用打伞。

用程序代码怎么表示这句话?

用刚才学过的 if 指令可以这样写:

1
2
3
4
5
6
7
weather = "rainy"

if weather == "rainy":
print("You should bring umbrella.")

if weather != "rainy":
print("You don't need to bring an umbrella.")

代码是能正常运行的,但现在有更简单的方式去表示上面的意思:

1
2
3
4
5
6
weather = "rainy"

if weather == "rainy":
print("You should bring an umbrella.")
else:
print("You don't need to bring an umbrella.")

if 后面用 else 来表示 if 条件判断不成立的情况,也就是非if的情况。请注意观察,else 后面也是有冒号: ,另外下面的程序块也是缩进的,说明下面缩进的程序代码是属于 else 指令的,是在 else 指令有效时才会执行,也就是在 if 条件判断不成立时才会使 else 指令有效。

进一步的还有 else if,也就是在 else 后面进一步做条件判断,这稍有点复杂,在需要用到的时候可以上网查找对应的资料。

3.3 实践练习时间

过去这个章节我们学习了变量、列表和对象,现在开始做几个实践练习,可以用在线 Python 练习环境,也可以用本地安装的 Python 环境。练习时注意一定要让程序能正常运行,并且按要求输出结果。

练习1:

定义一个变量 a 并赋值 50,用 if 指令判断 a 是否小于 100,如果小于就打印 “a is smaller than 100.”。程序能成功执行后再修改变量 a 的值为 120,再执行一次程序,看一下运行结果是什么。

练习2:

定义一个变量 age 并赋值 10,表示 10 岁,然后用 if 指令判断是否小于 12,如果大于就打印 “This is a child.”,否则就打印 “This is not a child”。程序能成功执行后再修改变量 age 的值为 20,再执行一次程序,看一下运行结果是什么。