这一题的内容我个人觉得其实也是 if 语句的内容。Zed 首先为我们带来了上一题加分练习的答案:
- 你认为 if 对于它下一行的代码做了什么? If 语句为代码创建了一个所谓的“分支”,就跟 RPG 游戏中的情节分支一样。if 语句告诉你的脚本:“如果这个布尔表达式为真,就运行接下来的代码,否则就跳过这一段。”
- 为什么 if 语句的下一行需要 4 个空格的缩进? 行尾的冒号的作用是告诉 Python 接下来你要创建一个新的代码区段。这根你创建函数时的冒号是一个道理。
- 如果不缩进, 会发生什么事情? 如果你没有缩进,你应该会看到 Python 报错。Python 的规则里,只要一行以“冒号(colon)” : 结尾,它接下来的内容就应该有缩进。
- 把习题 27 中的其它布尔表达式放到 if 语句 中会不会也可以运行呢?试一下。可以。而且不管多复杂都可以,虽然写复杂的东西通常是一种不好的编程风格。
- 如果把变量 people , cats , 和 dogs 的初始值改掉, 会发生什么事情? 因为你比较的对象是数字,如果你把这些数字改掉的话,某些位置的 if 语句会被演绎为 True ,而它下面的代码区段将被运行。你可以试着修改这些数字,然后在头脑里假想一下那一段代码会被运行。
让后正题部分和上一题是一个套路,没有太多说的,跟着去做就好。
elif
和 else
的功能。cars
, people
和 buses
的数量改掉,然后追溯每一个 if 语句。看看最后会打印出来什么来。cars > people and buses < cars
people = 30
cars = 40
buses = 15
# 比较 cars 和 people 的大小,根据情况打印不同的语句。
if cars > people:
print("We should take the cars.")
elif cars < people:
print("We shoule not take the cars.")
else:
print("We can't decide.")
# 这次是比较 buses 和 cars
if buses > cars:
print("That's too many buses.")
elif buses < cars:
print("Maybe we could take the buses.")
else:
print("We still can't decide.")
# 判断 people 和 buses 的大小。并打印相应的内容
if people > buses:
print("Alright, let's just take the buses.")
else:
print("Fine, let's stay home then.")
elif
和 else
的功能 + 30.2 该变量试试本段脚本一共有三段 if 语句来分析一下看看吧
第一段 if cars > people:
我们知道 cars =40
people = 30
所以 if 语句是真,和我们在 29 练习时一样执行了 if 下面的 print 语句 结果是:We should take the cars.
。在后面的语句没有执行。
第二段 if buses > cars:
再看一下 buses = 15
,语句是假的。根据 29 题的经验,if 语句下的代码不会打印。但是我们看到结果中有一句 Maybe we could take the buses.
它是 elif cars < people:
语句下的一条内容。所以可以推论,当 if 语句为假时会执行 elif
语句。
第三段 if people > buses:
,它的结果是 Alright, let's just take the buses.
这和 if 语句为真的情况一样。
而 else
语句下面的 print 似乎一直都没有作用
所以结论是:当 if 语句为假的时候 大概 会执行 elif 语句; 而 else 是没用的,相当于注释,它的内容不会被打印。
真的是这样?那至少写else
还不如写 #
省事,省了 4 个空格排版也方便。我看 python4 的时候就会取消 else
了。
既然已经有结论了,不如让我们改一下初始变量看看可好,改变一下布尔表达式的结果看看我们上面的结论是否正确:
people = 40
cars = 30
buses = 30
people
和 cars
对调,让 buses
等于 cars
第一段 if cars > people:
由于我们的修改,第一段的 if 语句已经是假的了,根据上面推论的结果判断 elif
语句真伪。果然打印的是 elif
为真的语句 We shoule not take the cars.
。 结论得到验证!
第二段 if buses > cars:
由于修改,这句话不对了,是假,根据上面的结论,会执行 elif
语句的内容也就是 Maybe we could take the buses.
!咦~ 不对啊! 注释 else
的内容被打印了!!!
仔细看看,原来和之前不同的地方在于 elif
语句在这里是假的,而之前是真的!
第三段 if people > buses:
从结果看和之前一样。
所以我们需要修正一下结论:
当 if 语句为假的时候会 判断 elif 语句,如果为真则执行 elif 语句,否则执行 else 语句 (这些 else 不用担心被 # 抢饭碗了 :P)
似乎完工了?不过我对第三段有点在意,我们的修改没有影响第三段,这段没有 elif 语句,那么如果 if 为假会怎样?(路人:你又来啊~!!)
结果来看,一二段都完美诠释了我们总结的结论,而第三段中在没有 elif 的情况下也执行了 else 语句!看来只要 前的布尔表达式判断为假就会执行 else 语句,无论它是 if 还是 elif
《笨办法学 python3》系列练习计划——目录