Discuss / Python / and和or的用法

and和or的用法

Topic source

小梦哒勒

#1 Created at ... [Delete] [Delete and Lock User]

or是从左到右计算表达式,返回第一个为真的 and :从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值 print(isinstance((1,2,3),(list or tuple)))#or是从左到右计算表达式,返回第一个为真的是list,(1,2,3)不是list所以结果为false print(isinstance((1,2,3),( tuple or list )))#or是从左到右计算表达式,返回第一个为真的是tuple,(1,2,3)是tuple所以结果是true print(isinstance((1,2,3),(list and tuple)))#从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值,(1,2,3)是tuple所以结果是true print(isinstance((1,2,3),(tuple and list )))#在与关系中返回的是最右边的部分,(1,2,3)不是list所以结果是false

以下内容来自white_wu博客给跟我一样疑惑的同学分享 and与or的用法1 or一真为真 a=raw_input('please input somting:') if a=='a' or a=='b': print 'it is a or b' else: print 'it is not a or b' 执行代码,输入a,b,ac,结果如下:

please input somting:a it is a or b

please input somting:b it is a or b

please input somting:ac it is not a or b

and 一假为假,全真为真 a=raw_input('please input somting:') if a!='a' and a!='b': print 'it is not a or b' else: print 'it is a or b'

执行代码,输入a,b,ac,结果如下: please input somting:a it is a or b

please input somting:b it is a or b

please input somting:ac it is not a or b 通过这个例子,我们可以看出,只有当条件同时满足a!='a' 和 a!='b'时,才会执行 print 'it is not a or b'

2.为了深入了解and or的用法,考虑到当a='a' or 'b'或者a='a' and 'b'时,会是怎么样子的呢。让我们先测试or的用法看下,测试代码如下: a=raw_input('please input somting:') if a=='a' or 'b': #注意这里b没有a= print 'it is a or b' else: print 'it is not a or b' 我们输入a,b,q,结果如下:

please input somting:a it is a or b

please input somting:b it is a or b

please input somting:q it is a or b

我们发现,无论输入什么,都满足a==‘a’ or 'b'这个条件,这是为什么呢?这时,我们看下or的运算原理:or是从左到右计算表达式,由于我们并没有将比较值‘a’ or 'b'用括号或者双引号集合起来,所以当我们输入q时,虽然输入q=='a'这个条件不成立,但是,此时判断条件变成了q=='a' or 'b',此时'b'不会空,不为空也为真,当两个条件之一有一个为真,这个判断条件就是Ture,所以无论我们输入什么,都是为Ture。 3.我们可以稍微修改代码,验证下or的运算原理:or是从左到右计算表达式,返回第一个为真的值。测试代码如下:

a=raw_input('please input somting:') if a==('a' or 'b'): print 'it is a or b' else: print 'it is not a or b' 我们输入a和b,结果如下:

please input somting:a it is a or b

please input somting:b it is not a or b 因为‘a’ or ‘b’这个被括起来的条件,‘a’为第一个真值,所以这个条件其实返回的是‘a’,所以只有当输入为a,时,才执行了 print 'it is a or b' 。

4.and :从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值。

开头这个isinstance是在误导新人么,后面的list tuple布尔值都是True,2个Ture值进行布尔运算的问题

print(isinstance((1,2,3),list)) false print(isinstance((1,2,3),tuple)) true print(isinstance([1,2,3],list)) true print(isinstance([1,2,3],tuple)) false

print(isinstance((1,2,3),(list and tuple))) true print(isinstance((1,2,3),(list or tuple))) false

所以,一楼说的没错<<<<<<<<

_氧化钙_

#4 Created at ... [Delete] [Delete and Lock User]

能不能把你的评论删除啊,你在误导其他人好吧

看了你这个错误的评论,浪费我好多时间。

老师的课程根本没有使用or,and,你为什么要加进来?还学人尝试解析。

大家不要理他,按照老师的标准来用就好了: isinstance((1, 2, 3), (list, tuple))

廖雪峰

#5 Created at ... [Delete] [Delete and Lock User]

楼主的理解是完全错误的。

and/or是表达式,你用list or tuple计算结果是list,这和'a' or 'b'计算结果是'a'道理是一样的

isinstance((1, 2, 3), (list or tuple))

在调用函数isinstance()之前传入的参数就被计算为:

arg0 = (1, 2, 3) arg1 = list or tuple = list

所以你的代码就是 isinstance(arg0, list),arg0不是list所以结果是false

同理list and tuple计算结果是tuple,跟isinstance()函数毫无关系。

tan90degrees

#6 Created at ... [Delete] [Delete and Lock User]

如果你学过其他语言,或者是对逻辑学有了解,那么你应该会知道 &,&&,|,||这些...其实我更喜欢用这些符号,而不是用and,or...

jefferyyy

#7 Created at ... [Delete] [Delete and Lock User]

bool(list) = True bool(tuple) = True list 和 tuple 都有布尔值的 所以list or tuple = list list and tuple = tuple tuple or list = tuple tuple and list = list 和isinstance()无关

Zhai_iU

#8 Created at ... [Delete] [Delete and Lock User]

楼上正解

Wanccao

#9 Created at ... [Delete] [Delete and Lock User]

说实话,我仔细看了一遍楼主的回答,没有任何问题,和雪峰老师的理解一样,楼主只是又将and,or单独拿出来,解释了一番而已,可能,是楼主的表达有省略,让大家误会了

你这biajibiaji一大堆 只要前面两句话就行了 你要想别人理解可以用具体点的比如1+1=2来给不懂的人解释


  • 1

Reply