我正在测试将随机值传递给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,则整个表达式将变得毫无意义)。
答案 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资源或在线课程。这不是特别困难,但它是一个更大的主题,无法解决一个答案。