【Python教程】七、那么多如果,只剩下结果|if语句和bool值

更多教程请私信~

来源:思路实验室 

作者:室长

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

上一期我们介绍了Python的几种数据类型,那么我们就需要判断一下要传入函数的数据的类型是不是函数所需要的。如果传入了不需要的类型,我们可以提前做出反应。

如果我们要判断数据的类型,有哪种逻辑上的途径呢?

一个是先提出我们需要的数据类型,再判断传过来的数据类型和它一不一样;再一个是先查询传过来的数据类型是什么,再判断它和我们需要的数据类型一不一样。

对于第一种类型,我们可以使用isinstance函数:

可以看到,isinstance函数是一个内置函数,有两个参数坑位,第一个是我们需要比对的数据,而另一个是相应的数据类型。这个函数就相当于对解释器说:“解解,这个a是不是整数啊?”那我们来运行一下:

解释器回答:“是!”

这个True大家还有没有印象?没错,isinstance函数的返回值就是上次我们说到的bool值(非对即错)。

而对于第二种类型,我们可以使用type函数:

等等,脑袋有点大了……不急,听室长一句一句给你解释:

首先type函数也是一个内置函数,只有一个参数坑位,就是需要查询类型的数据,而它的返回值就是数据类型。

而第3行其实可以分为两部分,第一部分是c = balabala,这一部分我们已经很熟悉了,是赋值语句,我们暂且不看,而后边的一部分则引入了一个我们之前没有提到过的概念——比较运算。

这个概念其实大家从小就接触过。在上学的过程中都会有考试,我们在卷面上写下五花八门的答案,而老师拿着红色钢笔在试卷上只划出了对勾和叉。b == int就像我们在考卷上作出的答案,而最终这个答案正确与否需要由程序来判断,同样也是非对即错,返回bool值,翻译成人话就是“b等于整数吗?”。

为什么是==呢?因为在Python中,一个等号已经是被安排上赋值的功能了,所以判断两个数据相不相等就需要用两个等号来表示。

比较运算不仅可以用来判断相不相等,还能判断是不是不相等(符号改为!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、是不是同一个(is \ is not)、在不在列表、元祖等容器里(in\ not in)。

我们来运行一下:

没有问题。但这里还需要强调一下,直接判断a==int是不可以的。因为a是具体的数值,而int是抽象的数据类型,所以a==int的结果永远是False(编程讲究白马非马,即白马 !=马,type(白马)=马)

那获得了bool值的返回值,我们又该如何让这个bool值去影响代码的执行呢?现在就该if语句出场了!

if,翻译成中文就是如果。而我们对程序的需求就是,如果这个数据的类型是函数所需要的,那就传进函数,而如果不是函数所需要的,那就告诉我们输入错了。来看一下if语句是怎么写的(基于上一期的函数):

可以看到if语句后边接了一个比较运算的表达式,实质上相当于接了一个bool值,当这个值为True的时候,这个if语句后的代码块就会被执行。注意if后边是有个小冒号的,这提示我们后边的代码块是需要缩进的。

但如果if后边的表达式不成立(即值为False)该怎么办呢?如果我们什么都不需要做,那这个if语句就算结束了,后边的代码取消缩进就好。而我们往往需要对不成立的情况也做出相应的操作,这时候就需要用else语句。else翻译成中文就是否则,注意else语句后边不跟表达式,直接跟冒号,因为在if那里判断过了,else只取相反的情况就可以,不需要再做一次判断。另外else语句不在if语句的代码块里,和if的缩进是平级的。

我们来运行一下:

解释器在判断x的类型为整数之后,把它放进了函数里。这次我们把x赋值为“大象”:

显然,“大象”不是整数,解释器把它打到了else语句里,狠狠地嘲讽了室长一顿。

那么如果我们想在比较运算表达式不成立的时候进入if语句该怎么办?很简单,因为bool值非对即错,所以求它的反值也很简单,只要在表达式前加一个not就可以:

我们这一期的题目开头是“那么多如果”,可到现在只出了两个如果(if和else),其他的呢?

举个例子,数据类型有那么多种,我们根据每种数据类型都设定一套操作可不可以?当然可以!这时就需要用到elif语句了。

聪明的同学已经看出来了,elif不就是else和if组合起来了嘛!没错,当一开始的if条件不成立的时候,就会转到后续的elif语句再去判断,如果再不成立,就再转到下一个elif语句……eeff无穷匮也。但如果所有的条件都不成立,要么就什么也不干,这个if判断全部不执行,要么用else语句为所有条件都不成立的情况设定操作:

当我们设定x=1时:

当我们设定x为一个字典时:

现在我们的解释器终于拥有了幼儿园小孩一样的智能了。但有些幼儿园小孩可能会犯的错误希望大家不要犯:

解释器是一行一行执行代码的,它不会知道不同比较运算的条件里的逻辑关系。假如我们判断一个人是不是中国人,那我们往往先要判断他是不是地球人,再判断他是不是中国人,这里是有一个包含关系,即他在是地球人的条件下才需要去判断他是不是中国人。这如果用代码写出来就是if语句里嵌套了一个if。但千万不能写成平级的if……elif语句。如果写成平级的,那当判断完他是地球人之后整个判断就结束了,他一下子就成中国人变成无国籍人士了。

这一期我们主要了解了比较运算表达式、bool值和if语句的运用,不知道大家现在还认不认识如果这两个字。从这期开始我们编写的程序开始有了智能的影子。为了让智能更加智能,接下来我们将学习另一个重要的语句,请关注下期:码农一张嘴,程序跑断腿|for循环

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值