上节课我们给大家布置了关于选择结构的课后习题,大家有没有做出来呢?
这里啊,我们来先重温一下上节课的题目的问题:
主题:日程表安排
这年头啊,大家都喜欢根据今天的温度情况来决定今天进行什么活动,这道题呢就让你根据输入的温度来确定今天去做什么。为了增加一点难度,我们使用华氏温度代替摄氏温度,比如平时我们说的0度换成华氏温度就是32华氏度,平时说的30度换成华氏度就是86华氏度。不过不用担心,这道题不需要你进行换算。
请写一个叫做schedule的函数,传入一个整数温度值作为我们的华氏温度,然后判断这个温度值所在的区间,返回今天要安排活动的字符串。
对应的区间关系如下:
- 温度为90度及以上,安排游泳活动,swimming
- 温度为80-89度,安排登山活动,hiking
- 温度为70-79度,安排网球活动,tennis
- 温度为60-69度,安排垒球活动,softball
- 温度为50-59度,安排足球活动,football
- 温度为49度及以下,安排看电影活动,movie
比如输入的温度为44,通过函数转换就可以得到今天应该去做的事情是看电影"movie"。
下面是要实现的一些例子:
函数调用命令 | 返回值 |
---|---|
schedule(44) | "movie" |
schedule(56) | "football" |
schedule(68) | "softball" |
schedule(92) | "swimming" |
这里的返回值的引号是为了强调返回值是字符串,你自己输出的时候不需要有双引号。
好,首先我们先来分析一下这个题目。
题目第一段提到一些背景知识,包括华氏温度和摄氏温度的转换,大家感兴趣的可以自己百度一下相关的小知识和转换工具。但是通过读后面的题目我们知道它也仅仅属于背景小知识了,因为我们的题目不需要进行相关的转换,所以用不上,换句话来说,对我们的解题没有帮助,所以我们可以把这一段划归为“废话”的行列。
接下来的下一段提到了我们要写怎样的函数以及函数的参数,返回值的要求,这才是我们要重点分析的部分。
读完题目,很简单的能看出来题目要求我们做的就是要完成一个选择结构的函数,所以if绝对不会少了。根据这一点,大家扪心自问一下,是否能够熟练掌握并使用if选择结构了呢?如果还不熟悉,请回去看我们本课对应的教学:零基础学python 9 程序不枯燥:选择结构
好,下面是我们本期的答案:
def schedule(temperature): # 请把代码写在这里哦 if temperature >= 90: return "swimming" elif 80 <= temperature <= 89: return "hiking" elif 70 <= temperature <= 79: return "tennis" elif 60 <= temperature <= 69: return "softball" elif 50 <= temperature <= 59: return "football" else: return "movie" # 测试代码 print('Testing code for schedule(44) is:', schedule(44)) print('Testing code for schedule(56) is:', schedule(56)) print('Testing code for schedule(68) is:', schedule(68)) print('Testing code for schedule(92) is:', schedule(92))
咱先来分析一下代码:
首先选择结构是肯定的了,那么我们就从if开始,后面跟的是条件,可以很清楚的根据题目给的区间描述文字把上述代码写出来,如果还有对此不太清楚的可以看咱们教学视频里面的详细解析。
好,该部分结束了我们来看一下如何进行这个代码的优化:
WTF??还有优化??按道理来说咱们的讲解到这里不是就结束了吗?
是的你没有看错!就是这么任性!这节课咱们来点复杂的,教教大家代码的优化。这里涉及到一些非常经典的逻辑思路,对大家的编程逻辑训练很有帮助的。请大家一定要看下去哦!下面是优化后的代码:
def schedule(temperature): # 请把代码写在这里哦 if temperature <= 49: return "movie" elif temperature <= 59: return "football" elif temperature <= 69: return "softball" elif temperature <= 79: return "tennis" elif temperature <= 89: return "hiking" else: return "swimming" # 测试代码 print('Testing code for schedule(44) is:', schedule(44)) print('Testing code for schedule(56) is:', schedule(56)) print('Testing code for schedule(68) is:', schedule(68)) print('Testing code for schedule(92) is:', schedule(92))
这一次我们从温度最低的开始,也就是小于等于49度去看电影开始。
然后看到elif的部分,这次是不是感觉有点不一样了?没错!是不是注意到这次我只写了小于等于59,却没有写大于等于谁呢?
好,以下的内容请张大嘴巴竖起耳朵仔细听好:
假设我们传入的参数是小于49的,比如是45度,那么是不是在判断温度(temperature)小于等于49这一步的时候已经判断成功了?对吧,那么我们就会进入这一个区块,返回"movie"。
如果传入的参数大于49度,是不是temperature <= 49
这一步会判断为假?为假的话就不会进入这个部分的代码,因而也就会往下进入elif temperature <= 59
的判断之中。那么前面的没有进入,说明了一个什么问题?这说明了温度必然大于49度,大于49度的整数是多少?是50度。也就是说,在进入elif temperature <= 59
这个部分判断的时候,我们已经有了一个先决条件那就是温度是大于等于50度的,也就是刚才这句代码等价于elif 50 <= temperature <= 59
这句代码,因此我们这样写可以省去许多的代码量,让我们的函数代码更加的优化。
后面的部分以此类推,和这个分析类似。这是一个重要的逻辑思维,请好好自己再思考一遍,确保自己能够掌握。
那么给大家留一个课后思考练习题:
我们的优化代码中是从温度低的一直写到温度高的,请问是否能够使用优化代码的方式先从温度高的写起,最后到温度低的呢?该如何写呢?欢迎在这篇文章下方发表你的答案或者进行讨论。
以下是本节课的视频教程,非常详细:
源文件下载地址:
链接:http://pan.baidu.com/s/1kVmdWkn 密码:lzak
感谢大家的收看我们下节课再见!
评论