一、标准库
二、第三方
1、Sympy
解方程。
import sympy
x = sympy.Symbol('x')
y = sympy.Symbol('y')
print(sympy.solve([x * y -2, y - 9], [x, y]))
>> [(2/9, 9)]
2、Z3
约束器。
Github:https://github.com/Z3Prover/z3
文档:https://www.cs.tau.ac.il/~msagiv/courses/asv/z3py/guide-examples.htm
发布版:https://github.com/Z3Prover/z3/releases
安装: 1.下载发布版程序
2.bin/z3放到Python/Lib下,bin中的其他库文件放到Python\libs\z3bin,include目录下的我也放到Python\include
3.
将z3bin添加到Path环境变量中
问题:PEAR - ARA = PEA,求字母分别代表的十进制数。
import z3
p = z3.Int('p')
e = z3.Int('e')
a = z3.Int('a')
r = z3.Int('r')
s = z3.Solver()
s.add(p < 10, e < 10, a < 10, r < 10)
s.add(p >= 0, e >= 0, a >= 0, r >= 0, p + e + a + r != 0)
s.add(p*1000 + e*100 + a*10 + r - (a*100 + r*10 + a) == p*100 + e*10 + a)
# print(z3.simplify(p*1000 + e*100 + a*10 + r - (a*100 + r*10 + a)))
if s.check() == z3.sat:
print(s.model())
else:
print("unsat")
>>> [p = 1, e = 0, a = 9, r = 8]
这么高大上的模块用来暴搜是不是浪费了。