我很难理解我的代码的行为。
我正在尝试比较两个布尔表达式,这些布尔表达式必须相同,或者仅一个特定的布尔表达式可以为真。这部分代码来自一个充满监狱的函数:
test_1 = (gender in prison.keys())
test_2 = bool(convict_entering[gender])
=> convict_entering是将性别作为键并且将值作为列表的字典,由于空列表被视为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
语句中,所以我真的不知道我在这里缺少什么。
这是我的实际代码,如下图所示
test_1 = (gender in prison.keys())
test_2 = bool(convict_entering[gender])
if not (gender in prison.keys() != bool(convict_entering[gender])):
答案 0 :(得分:0)
当两个值都为true时,您的代码可以正常工作。这是两个值都为真的示例:
bool compareByOvertime(const Worker& lh,const Worker& rh)
{
return lh.Overtimehours() > rh.Overtimehours();
};
尽管您可以将双重否定简化为
prison = {"male":1,"female":2}
convict_entering = {"male":3,"female":4}
gender = "male"
test_1 = (gender in prison.keys())
test_2 = bool(convict_entering[gender])
if not (test_1 != test_2):
print("if")
else:
print("else")
答案 1 :(得分:0)
您的问题是由于操作员链接而发生的。
如果有:
if not (gender in prison.keys() != bool(convict_entering[gender])):
... !=
运算符仅将右边的布尔表达式与gender
进行比较,而不是与in
运算符的结果进行比较。您应强制将in
运算符隔离,以使其不与!=
链接。这可以通过使用括号来完成:
if not ((gender in prison.keys()) != bool(convict_entering[gender])):
请注意,在if
条件下,您将使用代表各个求值表达式的变量(test_1
和test_2
)时,不会发生此问题。您是在问题中显示的代码中完成此操作的,而不是在实际代码中完成的。
类似的事情发生在可以链接的其他运算符上,如此处所述:
is
operators is
- operator precedence in Python? 请注意,您最好使用==
并放下not
:
if (gender in prison.keys()) != bool(convict_entering[gender]):
答案 2 :(得分:0)
(代表问题作者发布的答案)。
感谢您的快速回复。我还是编码新手。
显然我的代码是正确的,但是我忘了隔离我的“ if语句”的左侧,所以这只是我根本看不到的键入错误。