python详解(1)——条件判断与布尔值

目录

一、前言

二、基础知识

1、布尔值

2、if判断

3、elif和else

①,if

②,else

4、if嵌套

三、are,not,or来了解过程

1、not

2,or和and和括号一起学

①,or

②,and

③、括号

四、进阶知识

1、不使用等式

2、整数与布尔值

3、浮点数与布尔值

4、字符串与布尔值

5、复数与布尔值

6、列表与布尔值

7、元组与布尔值

8、字典与布尔值

9、集合与布尔值

五、作用与试题

六、尾声


一、前言

刚写完蜘蛛纸牌的代码,没想法,水一篇文章吧。但是在水的过程中发现了一些很有意思的东西。

本文将会带你完完全全了解if与布尔值。他们会碰撞出很神奇的火花。如果你是初学,只看第二部分和第四部分就行了,第三部分实战作用不大。

二、基础知识

1、布尔值

基本概念:

布尔值,是一个特殊的数据类型,只有True和False两种,分别代表真与假,用来检测一个条件是否成立当条件成立则会转换成True,否则为False。

初学可以看成yes和no来理解。这种理解方法仅仅适用于刚接触,学一会儿就不适用了。

有些脚本会将True和False转换为1和0,下一章会进行详解。

2、if判断

举个基础例子:

if 4 > 3:
    print("a")

这是最基础的条件判断,编写格式为:

如果 式子:

    输出a

if的意思就是如果。意义说白话就是:如果这个式子是正确的,就执行下面的部分。

式子的两边可以放上变量,例如:

a=1
b=2
if a+b==3:
    print("a")

接下来就引出一个概念:操作运算符,例如上面代码里的>。常用的操作运算符有六种:

解析
a==b ==用来侦测a是否等于b
a>b >用来侦测a是否大于b
a <用来侦测a是否小于b
a>=b >=用来侦测a是否≥b
a<=b <=用来侦测a是否≤b
a!=b !=用来侦测a是否不等于b

拿上面的程序举个例子:运行后,检测4>3是否成立,4确实大于3,条件成立,所以就是True。

有人可能会问:为什么要空四格?这里又引出了一个新的概念:层级。

为什么要有层级呢?

if 1==1:
print("a")
print("b")

例如这段代码,你怎么知道print("b")是条件判断成功才执行的还是一条单独的语句?

所以有了层级。我们需要在要执行的代码前面空格。这些空格有一个名字:缩进。

if 1==1:
    print("a")
print("b")

这样是不是清晰明了?是条件成立后才会输出a,输出b与if语句没有关系。

空几格都行,但是必须保持一致。不能像这样:

if 1==1:
    print("a")
   print("b")

这样程序会报错,提示你缩进不一致。不能Tab和空格一起用,也会报错,要么全用空格,要么全用Tab。

总之,如果条件成立了,就会执行下一个层级的语句,否则直接跳过。

但是也可以不跳过,接下来看elif和else的解析。

3、elif和else

①,else

我们可以如果条件不成立就是为False,就会执行另一段代码。可以用else。

a=int(input("你会打篮球吗"))
if a=="yes":
    print("你可能是蔡徐坤")
else:
    print("你不是蔡徐坤")

说白话:如果获得的答复是yes,就是会打篮球,那么就可能是蔡徐坤,否则不是蔡徐坤。这样写是不是就清晰明了?

如果不会打篮球,就是回答不是yes,结果为False,就会执行else后面的语句。

else翻译一下就是否则。

编写格式:

if 式子:

    代码

else:

    代码

②,elif

那么elif怎么用呢?

现在要完成一个代码:如果变量a是1,发送“变量a是1”,如果变量a是2,发送“变量a是2”,如果变量a不是1也不是2,发送“变量a不是1也不是2”。

你们可能会这样写:

if a==1:
    print("变量a是1")
if a==2:
    print("变量a是2")
if a!=1:
    if a!=2:
        print("变量a不是1也不是2")

或许会这样写:

if a==1:
    print("变量a是1")
else if a==2:
        print("变量a是2")
     else:
        print("变量a不是1也不是2")

第一种写法起码还正常,第二种写法写出来直接报错。

其实,可以用elif。elif就相当于else和if的结合体,看例子:

if a==1:
    print("变量a是1")
elif:
    print("变量a是2")
else:
    print("变量a不是1也不是2")

解析:

如果 a是1:

    输出变量a是1

否则如果 a是2:

    输出变量a是2

否则:

    输出变量a不是1也不是2

这样理解不会还有人不会吧?那你真的不适合学编程。

4、if嵌套

if是可以嵌套的。例如:

if 1==1:
    if 0==0:
        print("a")

解析:

如果 1=1:

    如果0=0:

        输出a

翻译成大白话,如果1=1,并且0=0,就输出a。

有人会问:不可以用and吗?可以,但是遇到以后判断套循环,循环套判断的玩意儿,嵌套的好处和坏处都会充分展现出来。

没什么好讲的。其实还可以用case,不过有些难度并且使用率低,先不讲吧。

三、are,not,or和优先级

1、not

先了解一下not的用法。

if not 0==1:
    print("a")

输出:a

为什么0不等于1,返回的是False,还会变成True呢?

这就是not的作用了。

not会把False变为True,True变成False,实现两者之间的转换。

在运算中,要先把式子转换为布尔类型再计算,不能把上文理解成把False0变成True,再True和True比较,详情请看下文优先级。

not

那是不是可以:

if not not not not not not not not 1:
    print("a")

输出:a

解析:两个not双重否定表肯定,变成if 1:,

别说是我教你的!!!

not没有什么实际性用途,代替他的比较多,比如else,和与之相对的操作运算符。

虽然文章的宗旨就是开发到底,但是这玩意儿确实没啥好盘的。

总结:not用在一个布尔值前(其他数转换之后的布尔值也算),优先级大于and和or,作用将False变为True,将True变为False,可以嵌套使用。

2,or和and和括号一起学

①,or

先研究or:

if 1==0 or 0==0:
    print("a")

输出:a

为什么1明明不等于0他还是True呢?

这就是or的作用。

or的作用就是:or左右两边的两个布尔值里有一个是True则为True。

上面的代码里,1==0为False,0==0为True,里面有一个是True,所以整个条件是True。

如果你还是不能理解,请看下表:

式子 结果
True or True True
True or False True
False or True True
False or False False

②,and

再研究and吧:

if 1==1 and 0==0:
    print("a")

输出:a

这时是True and True,返回为True。

if 1==0 and 0==0:
    print("a")

输出:a

这时是False and True,返回为False。

同样看一下这个表格:

式子 结果
True and True True
True and False False
False and True False
False and False False

所以,and的作用就是:and左右两个布尔值两个都为True则为True。

and和or说白话就是和,或。

③、括号

首先,我们要了解一下优先级是什么。

优先级就是在一个式子里面,先运算什么,比如数学里面先算括号再算幂再算乘除最后算加减。这是数学的优先级。

下面是条件判断中的优先级:

1,把式子转换为布尔类型

2,用下文知识把数,字符串,数组转换为布尔类型

3,先转化括号内的式子

4,转化not

5,转化and

6,转化or

既然数学可以用括号改变运算顺序,python当然也可以:

if (1==1 or 1==0) and 0==0:
    print("a")

输出:a

虽然是先and后or,但是我们改变了运算顺序,让or先运算。把式子转换成布尔类型,此时True or False结果为True,True and True结果为True,所以输出a。

不过括号是不能乱用的哦,来看一下这题:

if(1 or 0) == 0:
    print("a")

请问,这个例子会输出a吗?

答:不会,0等价于False,但是or的作用可不像数学一样。1 or 0等于True or False,结果就是True,True不等于False,结果为False。用括号的时候千万别进入这个误区,他并不是1==0 or 0==0。and同理。作者啊呸,某人曾经掉进这个坑卡了半小时。所以奉劝大家别乱用括号。

理解又上了一个台阶。or和and是例如上文说的优先级那样的,要先执行布尔值的转换,所有数字数组都变成True和False时,再进行理解,不会还有人不会吧?

总之,一切条件判断按照上面的优先级一步步来,不可能错。

小测试:

if not 1 or 0:
    print("a")

这个程序里会输出a吗?

答:不会,因为python之中四者优先级为转换True>not>and>or。not 1先执行,1是True,not转换之后为False,0也是False,所以不会输出

恭喜你已经学会了一半,接下来是进阶知识。

四、进阶知识

后面的内容是比较高级的知识,新手别看了,会涉及其他内容,掌握到这里就行

1、不使用等式

如果判断条件成立,便会转换为True,否则为False。

所以便有了以下写法:

while True:
    pass

原理很简单,反正他要转换成True,那就直接转换就行了,直接不用等式表达就能成为死循环。

2、整数与布尔值

使用条件判断最常见的就是例如第二部分的例子一样,判断两个整数是否相等。

学整数与布尔值的关系,我们要先知道0和1与False和True之间的联系。什么联系呢?例如这个例子:

if 1:
    print("a")

输出结果为a。

为什么会是True?上文说了,不为0的正整数都可以表示成True。1也可以。就算把1,变成2,、3、4、5之类的,结果都是True。

if 2:
    print("a")

输出:a。

接下来就开始玄学文章了:

虽然任何数转换成布尔类型都可以表示成True,但是:

if 1 == True:
    print("a")

输出结果为a

1却竟然等于True。

if 2==True:
    print("a")
else:
    print("b")

输出:b

2却不行。

由此可见,1与True是等价的,0与False同理。

有人可能会问:既然2,3,4,5...都可以转换为True,那为什么不等于呢?

死概念:除了一些特殊的数据,大部分数转换成另一数据类型后值与原数不相等。

这就好比0.0不等于0,"0"也不等于0一样。

1与True就是“特殊的数据”,他俩才是真爱,才是实实在在的相等。

如果等价的话……

if True+1==2:
    print("a")

输出:a

属实离谱。如果再有人在你面前说数据类型不同不能运算,请把这篇文章发给他。

不过实战的时候这样运算只能中午用,因为早晚会出事中午不适合写python。

大于1的数是True,0是False,那么,如果是小于0的数呢?

if -1:
    print("a")

输出:a

负数也是True,没想到吧。

说了这么多,我们可以总结一下整数与布尔值的关系:

总结:整数中,除了0会转换成False,其他数都会转换为True,但是True只等价于1,并且可以与整数进行运算。

3、浮点数与布尔值

整数盘完了,怎么能不盘浮点数呢?

先看看浮点数的转换:

if 1.1:
    print("a")
if 0.1:
    print("a")

输出:a

a

由此可知,如果浮点数大于0.0,就会转换为True。

如果是0.0呢?

这个有点奇葩,要写一点超纲的玩意儿:强制转换成0.0再计算,用f

a=0
a=f'{a:.1f}'
print(a)
if a:
    print("a")

输出:0.0

a

此时a是0.0,值确实True。

所以0.0的值为True。

肯定有人疑惑了:0.0不就是0吗还是True?

一看就没好好看,上面不是说了,0.0不等于0吗?

if 0.0==0:
    print("a")

输出:

编程时的一个大大大误区便是与数学混淆,最常见的就是赋值运算符=和操作运算符==的区分。

接下来抢答,看你们的推理能力了:如果是负数浮点数,会转换成False还是True呢?

if -1.1:
    print("a")

输出:a

是的,也是True。

总结:在浮点数中,任何数皆为True。

4、字符串与布尔值

接下来盘字符串,字符串是有些特殊的,因为他没有大小,只有长度,不过长度可以看成另类的大小吧,先看看普通字符串:

if "你干嘛哈哈诶呦":
    print("a")
if "0":
    print("a")

输出:a

字符串不论里面是啥,统统是True,即使里面的内容是False也是True。

总结:在字符串中,所有值都为True。

等等,可不可以用空字符串呢?

if "":
    print("a")

输出:

所以,空字符串为False。看来是与字符串长度有关的。

总结:在字符串中,除了空字符串都为True。

再等等,如果字符串里面是转义字符呢?

转义字符他只会形成意义的转换,算不算长度?

if "\n":
    print("a")

输出:a

就算\n是转义字符,也是a。

这同时也证明了:就算是字符串里的转义字符也是算长度的。

总结:在字符串中,除了空字符串为False,其他都为True,包含只有转义字符的字符串。

诶,再再再再再等等,如果是用来使文本不发生转义,在前面加r呢?

if r"":
    print("a")

输出:

用来不发生转义的r也是False。这也证明字符串外的r不算字符,f同理。

总结:在字符串中,若字符串长度为0(字符串外字符也算)则是False,字符串长度大于0都为True,包含只有转义字符的字符串。

诶,再x100等等,如果字符串长度为负呢

···好像不能,那直接pass!

5、复数与布尔值

作者没上高中不会复数md跳过!不过估计也是任何数皆为True

6、列表与布尔值

接下来盘列表,可能有两种:与列表内值的真假有关,与列表长度有关

a=["只因你太美","你干嘛哈哈诶呦"]
if a:
    print("a")

输出:a

字符串列表,则是内容为True的列表为True。

如果列表内容全是False呢?

a=[0,0]
if a:
    print("a")

输出:a

就算内容为False,也是True。可以看出,列表真假与列表内容无关。

那是不是与列表长度有关呢?

a=[]
if a:
    print("a")

输出:

列表为空,则是False。

总结:若列表为空则是False,与列表内容无关

7、元组与布尔值


有了列表的借鉴,元组是不是也是这样呢?

a=(0,0,0)
if a:
    print("a")
a=()
if a:
    print("b")

输出:a

同样与内容无关,元素为空时为False

总结:元组同列表

8、字典与布尔值

字典与其他类型有一些区分,是不是不如上一样?

a={0:0}
if a:
    print("a")
a={}
if a:
    print("b")

输出:a

好吧,还以为会有什么惊喜

总结:字典同列表

9、集合与布尔值

集合估计也不会有惊喜了

a={1,}
if a:
    print("a")
a=set()
if a:
    print("b")

输出:a

果然…乌鱼了

总结:集合同列表


最终得出:True与1等价,False与0等价,但是除0之外的其他数都是True。在字符串字典集合列表元组里,都是有值为True,空值为False

五、作用与试题

学这玩意儿有什么作用吗?

肯定是有的,例如a是一个字符串或列表或字典或元组或集合,检测他是否为空,直接if a就行。

a=[]
#普通方法:
if len(a)==0:
    print("a")
#新方法:
if a:
    pass
else:
    print("a")

诶,好像更复杂了···

不,可以检验列表是否有值,让你在别人面前秀一把(bushi

然后not and or 和条件判断运算优先级的理解也会加深。

来几道测试题吧:

1:

if (not (1 and 0) or not(0 and 0)) and not(not 0 and 1):
    print("你干嘛哈哈诶呦")

会不会输出你干嘛哈哈诶呦?

2:

if not "0":
    print("a")

会不会输出a?

3:

a=input("你会唱吗")
b=input("你会跳吗")
c=input("你会rap吗")
d=input("你会篮球吗")
e=input("你会足球吗")
f=input("你会排球吗")
if #———————
    print("你是蔡徐坤!")
elif #——————
    print("你是还会足球排球的蔡徐坤!")
else:
    print("你啥也不是")

 请补全代码,额外条件:不能用!=

答案:

1:不会

解析:代码转换步骤来

1,转换为if (not (True and False) or not(False and False)) and not(not False and True):

2,转换为if (not False or not False) and not True:

3,转换为if (True or True) and False:

4,转换为if True and False:
结果为False。

2:不会

解析:转换为if  not True:

转换为if False:
结果为False。

3:首先要理清条件:是蔡徐坤则是会唱跳rap篮球,全能蔡徐坤则是会唱跳rap篮球足球排球,啥也不是则是其他情况。

if a=="yes" and b=="yes" and c=="yes" and d=="yes" and e=="no" and f=="no"

if a=="yes" and b=="yes" and c=="yes" and d=="yes" and e=="yes" and f=="yes"

不能用(a or b or c or d or e or f)=="yes",不然永远都是True。

六、尾声

本文就是各种类型和布尔值的转换,if的基础用法与and or not的用法,有用处,但是不多。

总之:布尔值用来表达一个等式是否成立,是不可以替代的。

条件判断用来侦测一个等式是否成立,同样不可以替代。

通过条件判断得到布尔值,两者相互依存。

本文若与其他文章雷同,纯属巧合。

本来没思路的,却写了个7600字的长文,累死了!!!

小彩蛋:文章怪谈

1:如果要用第四部分的招式,请在中午使用。

2:如果用not嵌套时,其他人在疑惑地看着你,请立刻离开场地并删除自己的代码。

3:如果你用第四部分的招式,千万不要让别人看见。

4:如果不小心让别人看见,请立刻远离医院,将门窗锁死,并寻求作者帮助。

5:如果看见的那个人追上了你,请注意保护头部,争取损失最小。

6:如果损失很大,请拨打11451466666联系作者,作者将会帮助你。

7:如果第四部分的那道True+1==2的例子你打到电脑上实验了,请立刻砸烂电脑,并且格式化。

8:本规则可能被篡改过,请勿完全相信。

祝您生活愉快!

------------------------------------------------------------end----------------------------------------------------------------

你可能感兴趣的:(python详解,python)