我无法理解代码的行为 .
我正在尝试比较两个需要相同的布尔表达式,或者只需要一个特定的布尔表达式就可以为真 . 这部分代码来自一个充满监狱的功能:
test_1 = (gender in prison.keys())
test_2 = bool(convict_entering[gender])
=> convict_entering是一个dict,它具有作为键的性别和值列表,因为空列表被认为是 False
它应该工作
if not (test_1 != test_2):
#does something if both are either true or either false
else:
#does something if the 2 bool are different
但当2个值为 True
时,我的代码进入了 else
语句,所以我在这里缺少't really know what I' m .
这是我的实际代码,如下图所示
test_1 = (gender in prison.keys())
test_2 = bool(convict_entering[gender])
if not (gender in prison.keys() != bool(convict_entering[gender])):
3 回答
由于操作员链接,您的问题发生 .
当你有:
...
!=
运算符将右手布尔表达式与gender
进行比较,而不是in
运算符的结果 . 您应该强制in
运算符被隔离,因此它不与!=
链接 . 这可以通过使用括号来完成:请注意,在
if
条件下,您将使用表示各个求值表达式的变量(test_1
和test_2
)时不会发生此问题 . 您在问题中提供的代码中执行了此操作,但实际代码中没有 .其他可以链接的运算符也会发生类似情况,如下所述:
Chaining is operators
Comparison operators and is - operator precedence in Python?
Python comparison operators chaining/grouping left to right?
作为旁注,您不妨使用
==
并删除not
:(代表作者提问回答) .
感谢您的快速回复 . 我还是新编码 .
显然我的代码是正确的,但我忘了隔离我的'if语句'的左侧,所以这只是一个我根本没有看到的打字错误 .
当两个值都为真时,您的代码可以正常工作 . 以下是两个值为true的示例:
虽然你可以将双重否定简化为
if (test_1 == test_2):