AND和OR切换?

时间:2018-04-04 21:00:27

标签: python

我想创建两个随机集并将它们与另外两个集进行比较。 当两个集合与其他两个集合相同时,程序应该停止。 这是我遇到问题的代码的简化版本:

import random
random.seed()

a = set()
b = set()
c = set()
d = set()

for i in range(3):
    a.add(random.randint(1,10))
    b.add(random.randint(1,10))

while a!=c and b!=d:
    c.clear()
    d.clear()
    for i in range(3):
        c.add(random.randint(1,10))
        d.add(random.randint(1,10))

print(a,b)
print(c,d)

与我的问题完全一致: while a!=c and b!=d:

当只有一对套件相同时,“和”循环已停止。 当我切换“和”为“或”时,它确实是我想要的,我只是不明白为什么? 有人可以解释一下。

4 个答案:

答案 0 :(得分:2)

a不是cb不是d时,条件成立。只要一对相等, and 就会失败并且循环被破坏。

如您所知,您可以使用or,但这可能会更明确:

while not (a == c and b == d):
    ...

这与你说的完全一致!

答案 1 :(得分:1)

想一想。你有条件:

a != c and b != d

这个条件告诉Python究竟是什么?好吧,我们可以看到它使用and运算符。 and运算符仅 返回True如果两个条件都为真。从此,我们可以看到,如果a集合 不等于 c集合 b 不等于 d集。

那么当一对集合变得相等时会发生什么? 上述情况将失败。由于两个集合之间的比较将返回False,而不是Trueand也将返回false,因为其条件都是不正确

你真正想要的是:

not (a == c and b == d)

我将把它作为练习留给你来解释为什么上述条件有效,而a != c and b != d却没有。

答案 2 :(得分:0)

当语句为True时,循环重复,在这种情况下,当a != cb != d评估为False时,while循环参数也是如此。 你想改变逻辑,改变:

a != c and b !=d

为:

not (a == c and b == d)

或:

a != c or b != d

这将实现您的目标。

答案 3 :(得分:0)

while not (a == c and b == d):
      #code