《笨办法学 python3》系列练习计划——30.else 和 if

题目

这一题的内容我个人觉得其实也是 if 语句的内容。Zed 首先为我们带来了上一题加分练习的答案:

  1. 你认为 if 对于它下一行的代码做了什么? If 语句为代码创建了一个所谓的“分支”,就跟 RPG 游戏中的情节分支一样。if 语句告诉你的脚本:“如果这个布尔表达式为真,就运行接下来的代码,否则就跳过这一段。”
  2. 为什么 if 语句的下一行需要 4 个空格的缩进? 行尾的冒号的作用是告诉 Python 接下来你要创建一个新的代码区段。这根你创建函数时的冒号是一个道理。
  3. 如果不缩进, 会发生什么事情? 如果你没有缩进,你应该会看到 Python 报错。Python 的规则里,只要一行以“冒号(colon)” : 结尾,它接下来的内容就应该有缩进。
  4. 把习题 27 中的其它布尔表达式放到 if 语句 中会不会也可以运行呢?试一下。可以。而且不管多复杂都可以,虽然写复杂的东西通常是一种不好的编程风格。
  5. 如果把变量 people , cats , 和 dogs 的初始值改掉, 会发生什么事情? 因为你比较的对象是数字,如果你把这些数字改掉的话,某些位置的 if 语句会被演绎为 True ,而它下面的代码区段将被运行。你可以试着修改这些数字,然后在头脑里假想一下那一段代码会被运行。

让后正题部分和上一题是一个套路,没有太多说的,跟着去做就好。

加分练习

  1. 猜想一下 elifelse 的功能。
  2. cars, peoplebuses 的数量改掉,然后追溯每一个 if 语句。看看最后会打印出来什么来。
  3. 试着写一些复杂的布尔表达式,例如 cars > people and buses < cars
  4. 在每一行的上面写注释,说明这一行的功用。




我的答案

30.0 基础练习 + 30.4 注释

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.")

这里写图片描述

30.1 elifelse 的功能 + 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

peoplecars 对调,让 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 为假会怎样?(路人:你又来啊~!!)

我们把三个初始变量都改为 30 看看
这里写图片描述

结果来看,一二段都完美诠释了我们总结的结论,而第三段中在没有 elif 的情况下也执行了 else 语句!看来只要 前的布尔表达式判断为假就会执行 else 语句,无论它是 if 还是 elif




返回目录

《笨办法学 python3》系列练习计划——目录

猜你喜欢

转载自blog.csdn.net/aaazz47/article/details/79716037