受输入影响的布尔条件

时间:2019-02-28 17:45:13

标签: boolean symbolic-math

我正在测试将随机值传递给Python中任意布尔条件时发生的情况。我运行了10次循环,每次都向A和B随机选择True或False。然后查看条件是否返回True或False并输出A和B的值。

for i in range(10):
    A = random.choice([True, False])
    B = random.choice([True, False])

    if (A and (A or B)) == True:
        print("Pass:")
        print("A: {} B: {}".format(A, B))
    else:
        print("Fail:")
        print("A: {} B: {}".format(A, B))

输出:

Pass:              Fail:               Pass:                Pass:
A: True B: True    A: False B: True    A: True B: False     A: True B: False 
Pass:              Pass:               Pass:
A: True B: True    A: True B: False    A: True B: True 
Pass:              Pass:               Fail:
A: True B: True    A: True B: True     A: False B: False

我选择的布尔条件是随机写的(这意味着没有特殊原因),但是我在输出中发现了一种模式。

所有Passes中B的值都不同(与Fails相同),但是A的值在Passes中始终为True,在{{1 }}。请记住,Fails是条件为True的结果,因此似乎条件恰好返回了与输入A相同的布尔值。

由于我发现这种特殊情况很奇怪,因此我进行了另一项测试。这次,我检查了此布尔表达式是否始终与A的初始输入相同。我还对其运行了20次,以获取输入的更多随机值。

Pass

输出:

for i in range(20):
    A = random.choice([True, False])
    B = random.choice([True, False])
    if (A and (A or B)) == A:
        print("Pass")
    else:
        print("Fail")

我简化了输出,但是当我运行代码时,它给出了全部20次传递,并且在代码运行几次时相同。

我的问题是,为什么我认为这种情况只是将输入A简化为“简化”?为了缩短条件,可以将布尔表达式“简化”吗?(在这种情况下,如果结果始终只是A,则整个表达式将变得毫无意义)。

2 个答案:

答案 0 :(得分:1)

这在符号逻辑上是微不足道的结果。

如果A为真,则表达式的计算结果如下:

True and (True or B)
True or B
True

答案 1 :(得分:1)

这一数学领域称为布尔代数。您的具体示例是吸收定律,例如10a或此处的“ X•(X + Y)= X”:

https://www.mi.mun.ca/users/cchaulk/misc/boolean.htm

(在布尔代数中,“和”有时用•表示,“或”有时用+表示。这使得对整数代数的类比更加明显,例如X + 0 = X和X•0 =0。) / p>

您更大的问题“布尔表达式可以简化”取决于表达式!它们通常可以,但是某些形式已完全简化。完整的讨论超出了Stack Overflow的范围-存在各种Web资源或在线课程。这不是特别困难,但它是一个更大的主题,无法解决一个答案。