基本不等于操作

时间:2018-08-04 19:55:06

标签: python python-3.x

需要帮助更好地理解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

2 个答案:

答案 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

orx = 6情况下,自然将这些与x = 9组合在一起(“如果这两个条件中的一个或两个都成立,则为真)”。

答案 1 :(得分:1)

您的难题是对布尔运算符的工作方式的误解。您期望if x!=6 or x!=9:做与if y==6 or y==9:相反的事情。但这不是and ornot的工作方式。

如果您有一个测试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的原因。 两者测试都必须成功。