需要帮助更好地理解if循环内是否等于and和/或语句。
在下面的代码中,对于1st for循环,我期望除6和9以外的整数(但如果我使用“ and”,则不是“ or”,而是得到所需的输出)。
第二个for循环结果正常。
a = [2, 6, 1, 9, 6, 3, 9]
for x in a:
if x != 6 or x != 9:
print(f"1st for loop {x}")
for y in a:
if y == 6 or y == 9:
print(f"2nd for loop {y}")
1st for loop 2
1st for loop 6
1st for loop 1
1st for loop 9
1st for loop 6
1st for loop 3
1st for loop 9
2nd for loop 6
2nd for loop 9
2nd for loop 6
2nd for loop 9
答案 0 :(得分:3)
如果您考虑条件的子条款
x != 6 or x != 9
x = 6
时:
x != 6 --> not true, it definitely is 6
x != 9 --> true, as it (still) is 6
在or
和x = 6
情况下,自然将这些与x = 9
组合在一起(“如果这两个条件中的一个或两个都成立,则为真)”。
答案 1 :(得分:1)
您的难题是对布尔运算符的工作方式的误解。您期望if x!=6 or x!=9:
做与if y==6 or y==9:
相反的事情。但这不是and
or
和not
的工作方式。
如果您有一个测试A or B
,则该测试的对立面是not (A or B)
。如果要卸下括号,则编写测试的等效方法是not A and not B
。请注意,and
不是or
。
您正在测试数字,并且想要拒绝6和9。如果您说它不等于6?,您得到的答案是,然后您回答好吗?也不等于9?,那么每个数字(包括6和9)都将通过测试。为什么?因为在测试9时,它不等于6,所以9通过了第一个测试。当您测试6时,它未通过第一个测试,但不等于9,因此6通过了第二个测试。并且您的代码说,如果 测试成功,您就接受数字。这就是为什么您需要and
而不是or
的原因。 两者测试都必须成功。