我想创建两个随机集并将它们与另外两个集进行比较。 当两个集合与其他两个集合相同时,程序应该停止。 这是我遇到问题的代码的简化版本:
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:
当只有一对套件相同时,“和”循环已停止。 当我切换“和”为“或”时,它确实是我想要的,我只是不明白为什么? 有人可以解释一下。
答案 0 :(得分:2)
当 a
不是c
且b
不是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
,而不是True
,and
也将返回false,因为其条件的都是不正确。
你真正想要的是:
not (a == c and b == d)
我将把它作为练习留给你来解释为什么上述条件有效,而a != c and b != d
却没有。
答案 2 :(得分:0)
当语句为True时,循环重复,在这种情况下,当a != c
或b != 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