17623095765 发表于 2020-12-10 15:35:31

关于 and or 还是不懂

本帖最后由 17623095765 于 2020-12-10 16:18 编辑


jia=['a','b','c']
yi=['x','y','z']
xin=[]

for qqq in jia:
   for www in yi:
       if (qqq!='a' or www!='x'):
                xin.append()

print(xin)

输出结果是
[['a', 'y'], ['a', 'z'], ['b', 'x'], ['b', 'y'], ['b', 'z'], ['c', 'x'], ['c', 'y'], ['c', 'z']]

按我的理解 应该是 先看左边发出所有不等于‘a’的
[['b', 'x'], ['b', 'y'], ['b', 'z'], ['c', 'x'], ['c', 'y'], ['c', 'z']]

然后看如果是www等于a那么看右边的发出所有等于a 和 不等于x的
[['a', 'y'], ['a', 'z']]


条件1 or 条件2
(条件1是真的所有值) 加上 (条件是假的情况下,条件2的是真的值)

而不是(条件1、条件2,二选一)

如果条件1、条件2都是假的,那么会执行吗

heidern0612 发表于 2020-12-10 15:49:49

本帖最后由 heidern0612 于 2020-12-10 16:07 编辑

1、or的情况是两者满足一即可。

为何输出为[['a', 'y'], ['a', 'z'], ['b', 'x'], ['b', 'y'], ['b', 'z'], ['c', 'x'], ['c', 'y'], ['c', 'z']],是因为:

在二维for循环的时候,是以一维循环的单个元素来依次循环二维数组的(同理多维数组都是以上一维度数组单个元素依次向上循环)。

所以过程应该是:

在a的情况下,循环x,y,z;在b的情况下循环x,y,z;在c的情况下循环x,y,z。

下面的就好解释了:

因为只要不同时满足即等于a又等于x的情况,就会按照:

ax(不满足不输出),ay,az,bx,by,bz,cx,cy,cy的顺序输出。

也就是说,你虽然前面条件不满足,但是你后面条件满足也是可以的,但是同时满足就不行了。



2、同假的情况下,输出还是假.

一真一假输出为真,总体就是上面说的,只要满足一个即可。

同真的话,只输出第一个,既常说的短路逻辑。

小伤口 发表于 2020-12-10 16:00:42


jia=['a','b','c']
yi=['x','y','z']
xin=[]

for qqq in jia:#外面的for循环意思就是‘a’带动一次yi的for循环,之后‘b’带动一次再‘c’带动一次
#每一次yi都要执行for循环,所以循环下来是('a''x' 'a' 'y''a''z' )('b' 'x' 'b' 'y' 'b' 'z')('c' 'x'’c''y''c''z')
   for www in yi:
       if (qqq!='a' or www!='x'):#or的意思只要其中一个符合题意就是真而a带动的第一次yi中的(‘a’‘x’)都不符合题意所以不会被添加
       #之后即使qqq==‘a’另一个www!=‘x’反之一样
                xin.append()

print(xin)
页: [1]
查看完整版本: 关于 and or 还是不懂