首页 文章

比较两个bool是否具有相同的值(均为True或两者均为假),'if statement'为真

提问于
浏览
-3

我无法理解代码的行为 .

我正在尝试比较两个需要相同的布尔表达式,或者只需要一个特定的布尔表达式就可以为真 . 这部分代码来自一个充满监狱的功能:

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

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

3 回答

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

    (代表作者提问回答) .

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

    显然我的代码是正确的,但我忘了隔离我的'if语句'的左侧,所以这只是一个我根本没有看到的打字错误 .

  • 0

    当两个值都为真时,您的代码可以正常工作 . 以下是两个值为true的示例:

    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")
    

    虽然你可以将双重否定简化为 if (test_1 == test_2):

相关问题