# 练习30. Else 和 If
上一节习题中你写了一些“if语句(if-statements)”,并且试图猜出它们实现的是什么功能。在你继续学习之前,我给你解释一下上一节的附加题的答案。上一节的附加习题你做过了吧
> 1. 认为 `if` 对于它下一行的代码做了什么?`If语句`为代码创建了一个所谓的“分支”, 这有点像选择自己毛线的书籍,你做了选择会打开一个页面,如果做了另一个选择,会到一个不同的方向。`if`语句告诉你的脚本:“如果这个布尔表达式是真的,就执行它下面的语句,否则就跳过这段代码”。
> 1. 为什么 if 语句的下一行需要缩进?代码的最后又一个冒号“:”,是告诉python要创建一个新代码块的方式,缩进4个空格,是标志那些代码属于这个代码块。这和你在本书的上半部分中定义函数的做法是一样的。
> 1. 如果不缩进,会怎样?如果没有缩进,你的代码将会报错,Python需要你在输入一行以冒号结尾的代码后有缩进。
> 1. 把习题 27 中的其它布尔表达式放到if语句中能不能运行呢?试一下。 可以。而且不管多复杂都可以,虽然写复杂的东西并不是一种好的编程风格。
> 1. 如果把变量`people`,`cats`,和`dogs`的初始值改掉,会怎样?因为你比较的对象是数字,如果你把这些数字改掉的话,某些位置的`if`语句会被演绎为 True,而它下面的代码区段将被运行。你可以试着修改这些数字,然后在头脑里假想一下那一段代码会被运行。
对比咱们的答案,确认自己真正懂得“代码块”的含义。这点对于你下一节的练习很重要,因为你将会写很多的 if 语句。
把下面这段写下来,并让它运行起来:
~~~
people = 30
cars = 40
trucks = 15
if cars > people:
print "We should take the cars."
elif cars < people:
print "We should not take the cars."
else:
print "We can't decide."
if trucks > cars:
print "That's too many trucks."
elif trucks < cars:
print "Maybe we could take the trucks."
else:
print "We still can't decide."
if people > trucks:
print "Alright, let's just take the trucks."
else:
print "Fine, let's stay home then."
~~~
## 你看到的结果
~~~
$ python ex30.py
We should take the cars.
Maybe we could take the trucks.
Alright, let's just take the trucks.
~~~
## 附加题
> 1. 想一下`elif` 和 `else` 的功能。
> 1. 将 `cars`, `people`, 和 `buses` 的数量改掉,然后追溯每一个 `if` 语句。看看最后会打印出什么来。
> 1. 试着写一些复杂的布尔表达式,例如 `cars > people` 和 `buses < cars`等。
> 1. 给每一行加上注释,解释每一句代码是什么功能。1
## 常见问题
### Q: 如果多个`elif`块为真,会怎样?
> Python的启动和运行只会针对第一个为真的代码块,所以你说的那种情况,只会执行第一块。
- 序言
- 前言
- 简介
- 0:安装和准备
- 1:第一个程序
- 2:注释和“#”井号
- 3:数字和数学计算
- 4:变量和命名
- 5:更多的变量和打印
- 6:字符串和文本
- 7:更多的打印(输出)
- 8:打印, 打印
- 9:打印, 打印, 打印
- 10:那是什么?
- 11:提问
- 12:提示别人
- 13:参数, 解包, 变量
- 14:提示和传递
- 15:读文件
- 16:读写文件
- 17:更多文件操作
- 18:命名, 变量, 代码, 函数
- 19:函数和变量
- 20:函数和文件
- 21:函数的返回值
- 22:到目前为止你学到了什么?
- 23:阅读代码
- 24:更多的练习
- 25:更多更多的练习
- 26:恭喜你,可以进行一次考试了
- 27:记住逻辑
- 28:布尔表达式
- 29:IF 语句
- 30:Else 和 If
- 31:做出决定
- 32:循环和列表
- 33:while循环
- 34:访问列表元素
- 35:分支和函数
- 36:设计和调试
- 37:复习符号
- 38:列表操作
- 39:字典,可爱的字典
- 40:模块, 类和对象
- 41:学会说面向对象
- 42:对象、类、以及从属关系
- 43:基本的面向对象的分析和设计
- 44:继承Vs.包含
- 45:你来制作一个游戏
- 46:项目骨架
- 47:自动化测试
- 48:更复杂的用户输入
- 49:写代码语句
- 50:你的第一个网站
- 51:从浏览器获取输入
- 52:开始你的web游戏
- 来自老程序员的建议
- 下一步
- 附录A:命令行教程
- 简介
- 安装和准备
- 路径, 文件夹, 名录 (pwd)
- 如果你迷路了
- 创建一个路径 (mkdir)
- 改变当前路径 (cd)
- 列出当前路径 (ls)
- 删除路径 (rmdir)
- 目录切换(pushd, popd)
- 生成一个空文件(Touch, New-Item)
- 复制文件 (cp)
- 移动文件 (mv)
- 查看文件 (less, MORE)
- 输出文件 (cat)
- 删除文件 (rm)
- 退出命令行 (exit)
- 下一步