目录
一、前言
二、基础知识
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与布尔值。他们会碰撞出很神奇的火花。如果你是初学,只看第二部分和第四部分就行了,第三部分实战作用不大。
基本概念:
布尔值,是一个特殊的数据类型,只有True和False两种,分别代表真与假,用来检测一个条件是否成立当条件成立则会转换成True,否则为False。
初学可以看成yes和no来理解。这种理解方法仅仅适用于刚接触,学一会儿就不适用了。
有些脚本会将True和False转换为1和0,下一章会进行详解。
举个基础例子:
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的解析。
我们可以如果条件不成立就是为False,就会执行另一段代码。可以用else。
a=int(input("你会打篮球吗"))
if a=="yes":
print("你可能是蔡徐坤")
else:
print("你不是蔡徐坤")
说白话:如果获得的答复是yes,就是会打篮球,那么就可能是蔡徐坤,否则不是蔡徐坤。这样写是不是就清晰明了?
如果不会打篮球,就是回答不是yes,结果为False,就会执行else后面的语句。
else翻译一下就是否则。
编写格式:
if 式子:
代码
else:
代码
那么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
这样理解不会还有人不会吧?那你真的不适合学编程。
if是可以嵌套的。例如:
if 1==1:
if 0==0:
print("a")
解析:
如果 1=1:
如果0=0:
输出a
翻译成大白话,如果1=1,并且0=0,就输出a。
有人会问:不可以用and吗?可以,但是遇到以后判断套循环,循环套判断的玩意儿,嵌套的好处和坏处都会充分展现出来。
没什么好讲的。其实还可以用case,不过有些难度并且使用率低,先不讲吧。
先了解一下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,可以嵌套使用。
先研究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吧:
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,所以不会输出
恭喜你已经学会了一半,接下来是进阶知识。
后面的内容是比较高级的知识,新手别看了,会涉及其他内容,掌握到这里就行
如果判断条件成立,便会转换为True,否则为False。
所以便有了以下写法:
while True:
pass
原理很简单,反正他要转换成True,那就直接转换就行了,直接不用等式表达就能成为死循环。
使用条件判断最常见的就是例如第二部分的例子一样,判断两个整数是否相等。
学整数与布尔值的关系,我们要先知道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,并且可以与整数进行运算。
整数盘完了,怎么能不盘浮点数呢?
先看看浮点数的转换:
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。
接下来盘字符串,字符串是有些特殊的,因为他没有大小,只有长度,不过长度可以看成另类的大小吧,先看看普通字符串:
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!
作者没上高中不会复数md跳过!不过估计也是任何数皆为True
接下来盘列表,可能有两种:与列表内值的真假有关,与列表长度有关
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,与列表内容无关
有了列表的借鉴,元组是不是也是这样呢?
a=(0,0,0)
if a:
print("a")
a=()
if a:
print("b")
输出:a
同样与内容无关,元素为空时为False
总结:元组同列表
字典与其他类型有一些区分,是不是不如上一样?
a={0:0}
if a:
print("a")
a={}
if a:
print("b")
输出:a
好吧,还以为会有什么惊喜
总结:字典同列表
集合估计也不会有惊喜了
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----------------------------------------------------------------