前言
1.回顾
上次提到的例子:如果不是大暴雨天,那么再判断下是不是台风天呢?如果也不是台风天(其他任意天气)那就真的可以要肆意放飞了;可以利用之前学过进行如下的构造:
如果 明天是特大暴雨:
如果打伞:
可以出门;
否则:
不可以出门;
否则:
如果台风天:
不可以出门
否则:
可以出门;
但也可以进行将上述的这种表达方式利用逻辑运算进行更加简单的构造,比如:
如果 明天是特大暴雨 and 不打伞:
不可以出门;
否则:
如果台风天:
不可以出门
否则:
可以出门;
当然还可以进行精简减少语句上的嵌套(多层if判断,即if下边还有if,类似于俄罗斯套娃),嵌套过多会导致不易理解,且容易出现错误,尤其针对连环条件下的判断,可以利用如下进行精简: 如果 明天是特大暴雨 and 不打伞: 不可以出门; 否则如果台风天: 不可以出门 否则: 可以出门;代码块类似的可以像上面的这样构建,想好了用python怎么实现了吗?
1.2WHY
多层判断的时候尤其需要注意一些条件的前后顺序,这样更不容易出错。比如在常见的分析中会对年龄进行不同的分段(不同情况下的划分标准可能不一样),如:童年10岁以下;少年,一般指10~17岁;青年,17~44岁;中年45~64;老年指65岁以上;那么就可以用if判断(后面也可以用case when等)进行实现,这样可以更加利于统计和分析(术语叫做连续变量离散化)。了解了更多的if判断结构后,基本上能满足绝大多数的情景需求。2.elif
整体的用语言来实现,就是变成如下这样的结构,都是利用之前学过的知识可以实现的:
按预设的逻辑得出了正常的结论,再测试下其他的条件:
但看着结构会略微复杂些,可以将第6、7行的两个if进行合并;可以利用前面接触过年and来进行并列判断,整合成(str_weather == '特大暴雨') and (str_umbrella == '打伞了'),这个表达的意思就是特大暴雨天并且打了伞,优化后如下:可以看出,输出符合预期,因为风这个判断执行的是第12行的输出,再试试其他的条件:
暴雨天气的判断也输出正常,and将来个条件结合起来判断,必须同时满足时才会返回True,再试试其他判断:整体也都输出正常,但其实整体还是有if的嵌套(第9行),是否可以再优化些呢?
可以将之前第9行的if嵌套的台风天的判断,统一合并到最前面的判断条件中,使用or(或者)来进行组合,即:((str_weather == '特大暴雨') and (str_umbrella == '没打伞')) or (str_weather == '台风天'),表达的意思是:特大暴雨并且没打伞,亦或是台风天,只要满足一个,就不能出门,再试下额外的条件,测试如下:虽然可以用多层嵌套解决,便实操中平时不在建议也不太这样做,一是不太美观,二是不太容易理解,尤其是串联的判断条件比较多的时候,这个时候可以使用elseif来层层判断,即如果……否则如果……否则如果……否则……这样可以类似地无限的判断下去。整体优化后如下:
多了个新的关键词,第8行的elif,其可以理解为else if的简写,整句理解下来就是:如果是特大暴雨并且没打伞就不能出门,否则如果是台风天也不能出门,其他的所有天气都可以出门;
再验证下大风等其他的条件:
均可以正常输出,这样要更加简练了很多,同时也比较容易理解。可以尝试在工作或生活中多用这种结构去做数据的清洗与预处理或者归类,可以达到较好的效果。能想到还有哪些比较好用的场景吗?下次可以利用这个场景做些简单的数据汇总或处理。学习小结
OK,每天进步一点点,将会迎来美丽的质变,今天只要记住Python的elif 嵌套语句哦!Python系列
Python系列07:if嵌套语句
Python系列06:if条件语句
python系列05:运算符(2)
Python系列04:运算符(1)
Python系列03:三种标识符
Python系列02:python数据类型
Python系列01:python安装与主要界面
----------------------------------------------
整理不易,欢迎点亮再看!
精鼎特邀