比较两个布尔值是否相同(“真”或“假”),如果“ if语句”为真

时间:2018-12-09 07:07:42

标签: python-3.x if-statement boolean-logic boolean-expression

我很难理解我的代码的行为。

我正在尝试比较两个布尔表达式,这些布尔表达式必须相同,或者仅一个特定的布尔表达式可以为真。这部分代码来自一个充满监狱的函数:

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])): 

here's a picture with VS code where you can see the moment

3 个答案:

答案 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_1test_2)时,不会发生此问题。您是在问题中显示的代码中完成此操作的,而不是在实际代码中完成的。

类似的事情发生在可以链接的其他运算符上,如此处所述:

请注意,您最好使用==并放下not

if (gender in prison.keys()) != bool(convict_entering[gender]):

答案 2 :(得分:0)

(代表问题作者发布的答案)

感谢您的快速回复。我还是编码新手。

显然我的代码是正确的,但是我忘了隔离我的“ if语句”的左侧,所以这只是我根本看不到的键入错误。