Sympy 中的逻辑表达式是什么?
SymPy 是一个符号数学Python包。它的目标是发展成为一个功能齐全的计算机代数系统,同时保持代码尽可能基本,使其易于理解和扩展。该软件包完全用Python语言编写。 sympy 中的逻辑表达式使用布尔函数表示。 sympy 的 sympy.basic.booleanarg 模块包含布尔函数。
常见的Python运算符& (And), | (Or) 和 ~ (Not) 可用于创建布尔表达式。 >> 也可以用来创造暗示。其他布尔运算或门是 NAND、NOR、XOR 等。
布尔真:
sympy.logic.boolalg.BooleanTrue
SymPy 中的 Boolean True 是一个可以使用 S.true 访问的单例,或者通过直接导入 True 或通过从 sympy 包中导入 symplify 来访问。
Python3
# import packages
from sympy import true
from sympy import S, sympify
# prints True
print(true)
# prints True
print(S.true)
# prints true
print(sympify(true))
Python3
# import packages
from sympy import false
from sympy import S, sympify
# prints False
print(false)
# prints False
print(S.false)
# prints False
print(sympify(false))
Python3
# import packages
from sympy import false, true
print(~true,~false)
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import And
res = x & y
print(res)
# 1&y ==y
print(And(x, y).subs(x, 1))
# 0&y ==0 or False
print(And(x, y).subs(x, 0))
# True&False == False
print(And(True, False))
# True & True == True
print(And(True, True))
# False & False == False
print(And(False, False))
# False & True == False
print(And(False, True))
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Or
res = x | y
print(res)
# 1&y == 1 or True
print(Or(x, y).subs(x, 1))
# 0|y ==y
print(Or(x, y).subs(x, 0))
# True | False == True
print(Or(True, False))
# True | True == True
print(Or(True, True))
# False | False == False
print(Or(False, False))
# False | True == True
print(Or(False, True))
Python3
# import packages
from sympy.abc import x
from sympy.logic.boolalg import Not
# nor formula
print(Not(x))
# ~True == True
print(Not(True))
# ~False == False
print(Not(False))
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nor
nor_formula = ~(x | y)
print(nor_formula)
print(Nor(x, y))
# ~( True | False) == False
print(Nor(True, False))
# ~(True | True) == False
print(Nor(True, True))
# ~(False | False) == True
print(Nor(False, False))
# ~(False | True) == False
print(Nor(False, True))
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nand
# not + nand == nand
nor_formula = ~(x & y)
print(nor_formula)
print(Nand(x, y))
# ~( True & False) == True
print(Nand(True, False))
# ~(True & True) == False
print(Nand(True, True))
# ~(False & False) == True
print(Nand(False, False))
# ~(False & True) == True
print(Nand(False, True))
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Xor
xor_formula = x ^ y
print(xor_formula)
print(Xor(x, y))
# True ^ False == True
print(Xor(True, False))
# True ^ True == False
print(Xor(True, True))
# False ^ False == False
print(Xor(False, False))
# False ^ True == True
print(Xor(False, True))
Python3
from sympy.abc import x, y
from sympy.logic.boolalg import Implies
# !A v B == implies formula
# returns false when A is true and B is
# false, rest all cases returns True
print(Implies(x, y))
# false
print(Implies(True, False))
# true
print(Implies(True, True))
# true
print(Implies(False, False))
# true
print(Implies(False, True))
print(x << y)
print(x >> y)
Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import Equivalent, And, Or
print(Equivalent(x, y, z))
# true != false so it returns false
print(Equivalent(True, False))
# True == True so it returns true
print(Equivalent(True, True))
# False == False so it returns true
print(Equivalent(False, False))
# False !=True so it returns false
print(Equivalent(False, True))
# true ==true == true so it returns true
print(Equivalent(True, Or(True, False), And(True, True)))
Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import ITE, Nor, Nand, Xor, Or, And
# ITE == if then else
print(ITE(x, y, z))
# x is true so y is returned
print(ITE(True, Or(True, False), And(True, True)))
# x is false so z is returned
print(ITE(Nor(True, False), Xor(True, False), Nand(True, True)))
输出:
True
True
True
布尔假:
sympy.logic.boolalg.BooleanFalse
SymPy 中的 Boolean False 是一个单例,可以使用 S.false 访问,也可以通过直接导入 false 或从 sympy 包中导入 symplify 来访问。
Python3
# import packages
from sympy import false
from sympy import S, sympify
# prints False
print(false)
# prints False
print(S.false)
# prints False
print(sympify(false))
输出:
False
False
False
否定真就是假,否定假就是真。
Python3
# import packages
from sympy import false, true
print(~true,~false)
输出:
False True
布尔值和:
sympy.logic.boolalg.And
它按顺序分析每个参数,如果所有参数都为真,则返回真。如果至少一个参数为假,则返回假。
- 真 &真 = 真
- 真&假 = 假
- 假&真=假
- 假&假=假
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import And
res = x & y
print(res)
# 1&y ==y
print(And(x, y).subs(x, 1))
# 0&y ==0 or False
print(And(x, y).subs(x, 0))
# True&False == False
print(And(True, False))
# True & True == True
print(And(True, True))
# False & False == False
print(And(False, False))
# False & True == False
print(And(False, True))
输出:
x & y
y
False
False
True
False
False
布尔或:
sympy.logic.boolalg.Or
如果任何参数为 true ,则返回 True ,否则返回 false 。
- 真 |真 = 真
- 真|假=真
- 假 |真 = 真
- 假|假=假
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Or
res = x | y
print(res)
# 1&y == 1 or True
print(Or(x, y).subs(x, 1))
# 0|y ==y
print(Or(x, y).subs(x, 0))
# True | False == True
print(Or(True, False))
# True | True == True
print(Or(True, True))
# False | False == False
print(Or(False, False))
# False | True == True
print(Or(False, True))
输出:
x | y
True
y
True
True
False
True
布尔非:
sympy.logic.boolalg.Not(arg)
不代表否定。如果语句为 False,则此方法返回 True。如果断言为真,则返回 False。
Python3
# import packages
from sympy.abc import x
from sympy.logic.boolalg import Not
# nor formula
print(Not(x))
# ~True == True
print(Not(True))
# ~False == False
print(Not(False))
输出:
~x
False
True
布尔诺:
sympy.logic.boolalg.Nor(*args)
也不是 Not 和 Or 的连词。非 = 非 + 或。它依次检查每个参数,如果其中任何一个为 True,则返回 False,如果所有参数均为 False,则返回 True。如果任何参数为 True,则返回 False。如果所有参数都为 False,则此函数返回 True。
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nor
nor_formula = ~(x | y)
print(nor_formula)
print(Nor(x, y))
# ~( True | False) == False
print(Nor(True, False))
# ~(True | True) == False
print(Nor(True, True))
# ~(False | False) == True
print(Nor(False, False))
# ~(False | True) == False
print(Nor(False, True))
输出:
~(x | y)
~(x | y)
False
False
True
False
布尔南德:
sympy.logic.boolalg.Nand(*args)
Nand 是 Not and 的合取。非 = 非 + 与。它连续分析每个输入,如果其中任何一个为 False,则返回 True,如果所有输入为 True,则返回 False。如果任何输入为 False,则此函数返回 True。如果所有参数都为 True,则返回 False。
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Nand
# not + nand == nand
nor_formula = ~(x & y)
print(nor_formula)
print(Nand(x, y))
# ~( True & False) == True
print(Nand(True, False))
# ~(True & True) == False
print(Nand(True, True))
# ~(False & False) == True
print(Nand(False, False))
# ~(False & True) == True
print(Nand(False, True))
输出:
~(x & y)
~(x & y)
True
False
True
True
布尔异或:
sympy.logic.boolalg.Xor(*args)
Xor 表示Logical XOR 或Exclusive Or函数。如果奇数个参数为 True,而其他参数为 False,则此函数返回 True。如果偶数个参数为真而其他参数为假,则结果为假。
Python3
# import packages
from sympy.abc import x, y
from sympy.logic.boolalg import Xor
xor_formula = x ^ y
print(xor_formula)
print(Xor(x, y))
# True ^ False == True
print(Xor(True, False))
# True ^ True == False
print(Xor(True, True))
# False ^ False == False
print(Xor(False, False))
# False ^ True == True
print(Xor(False, True))
输出:
x ^ y
x ^ y
True
False
False
True
布尔暗示:
sympy.logic.boolalg.Implies(*args)
暗示指的是逻辑暗示。 x 意味着 y 等价于 !xv y。接受 x 和 y 作为布尔输入。如果 x 为 True 而 y 为 False,则返回 False。否则,返回 True。
Python3
from sympy.abc import x, y
from sympy.logic.boolalg import Implies
# !A v B == implies formula
# returns false when A is true and B is
# false, rest all cases returns True
print(Implies(x, y))
# false
print(Implies(True, False))
# true
print(Implies(True, True))
# true
print(Implies(False, False))
# true
print(Implies(False, True))
print(x << y)
print(x >> y)
输出:
Implies(x, y)
False
True
True
True
Implies(y, x)
Implies(x, y)
布尔等价
sympy.logic.boolalg.Equivalent(*args)
指等价关系。如果 x 和 y 都为 True 或 False,则 Equivalent(x, y) 为 True。如果所有参数在逻辑上等价,则返回 True。否则,返回 False。
Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import Equivalent, And, Or
print(Equivalent(x, y, z))
# true != false so it returns false
print(Equivalent(True, False))
# True == True so it returns true
print(Equivalent(True, True))
# False == False so it returns true
print(Equivalent(False, False))
# False !=True so it returns false
print(Equivalent(False, True))
# true ==true == true so it returns true
print(Equivalent(True, Or(True, False), And(True, True)))
输出:
Equivalent(x, y, z)
False
True
True
False
True
布尔 ITE:
sympy.logic.boolalg.ITE(*args)
ITE指的是 If then else 子句。如果 A 为真,ITE(x, y, z) 计算并返回 y 的结果;否则,ITE(x, y, z) 计算并返回 z 的结果。所有参数都必须是布尔值。
Python3
from sympy.abc import x, y, z
from sympy.logic.boolalg import ITE, Nor, Nand, Xor, Or, And
# ITE == if then else
print(ITE(x, y, z))
# x is true so y is returned
print(ITE(True, Or(True, False), And(True, True)))
# x is false so z is returned
print(ITE(Nor(True, False), Xor(True, False), Nand(True, True)))
输出:
ITE(x, y, z)
True
False