习题 30: Else 和 If

前一习题中你写了一些 “if 语句(if-statements)”,并且试图猜出它们是什么,以及实现的是什么功能。在你继续学习之前,我给你解释一下上一节的加分习题的答案。上一节的加分习题你做过了吧,有没有?

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

把我的答案和你的答案比较一下,确认自己真正懂得代码“区段”的含义。这点对于你下一节的练习很重要,因为你将会写很多的 if 语句。

把这一段写下来,并让它运行起来:

 people = 30
cars = 40
buses = 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 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." if people > buses:
print "Alright, let's just take the buses."
else:
print "Fine, let's stay home then."

你应该看到的结果

加分习题

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

习题练习

1.

if和else

如果我们需要考虑的情况只有两种,即满足某一条件或者不满足该条件,可以使用if else语句。

if a>b:
sentence1
else:
sentence2

执行过程如下: 
    先执行if语句中的判断语句,满足则执行语句1,不满足则执行语句2。

2.

if 语句的嵌套

以a,b两个数比较大小来说,如果有三种情况需要区分,则需要进行嵌套,a>b;a小于b;a=b。 
所以

if a>b:
sentence1
elif a<b:
sentence2
else:
sentence3

执行过程如下:

先执行if语句中的判断语句a>b,若该语句为True,执行语句1,若该语句为False则表示a和b的大小关系属于另外两种情况,需要再次进行判断。执行elif中的判断语句,若该语句为True则执行语句2,若该语句为False则表示属于第三种情况,因为只有三种情况,只要不属于前两种,必然属于第三种,因此为求简便不需要任何判断语句直接执行语句3。

还可以考虑n种情况,n种情况下你需要写n-2个elif判断语句,同样的第n种情况不需要判断语句只需要执行相应的语句即可,情况的顺序是自定义的。

最新文章

  1. iOS 设置铃声---加载音乐和音频然后进行播放
  2. error: Error retrieving parent for item: No resource found that matches the given name &amp;#39;Theme.AppCompat.Light&amp;#39;.,appcompatv7
  3. lucene 专业名词作用整理
  4. 用C#实现Base64处理,加密解密,编码解码
  5. 11.1Daily Scrum
  6. C++的ABI真特么是evil
  7. HDU 4691(多校第九场1006) 后缀数组
  8. springboot~hazelcast缓存中间件
  9. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案
  10. webgl开发中添加IIS的mime类型
  11. WPF程序 双击exe自动申请“以管理员方式运行”权限
  12. 如何删除GitHub中已经建好的仓库(repository)
  13. php获取跳转后的真实链接
  14. ThinkPHP CURD mysql操作
  15. 基于Linux的Samba开源共享解决方案测试(六)
  16. 语音-数字中继-E1-学习帖
  17. Liunx cannot remove `xxx&#39;: Operation not permitted
  18. 高性能的HTTP代理 LittleProxy
  19. UIImageView的一些用法
  20. oracle10g获取Date类型字段无时分秒解决办法!

热门文章

  1. MySQL安全优化
  2. django导入 views.py
  3. IP 分段 子网掩码
  4. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_引用类型和值类型(二)
  5. BAPC 2014:Button Bashing(暴力+bfs)
  6. dedecms中模板函数
  7. C# 事务提交(非数据库)
  8. 3 不用IDE开发groovy
  9. 2048小游戏(Java)(swing实现)(二)
  10. RequireJS -Javascript模块化(二、模块依赖)