Python 鼠尾草:如何编码?

Python 鼠尾草:如何编码?,python,sage,Python,Sage,我正在尝试使用数学中的模块。在我遇到一些奇怪的错误后,我试图简单地复制并执行SageCloud中随文档提供的代码片段。但是我犯了一些错误 sage: B.<a,b,c> = BooleanPolynomialRing --------------------------------------------------------------------------- AttributeError Traceback (most r

我正在尝试使用数学中的模块。在我遇到一些奇怪的错误后,我试图简单地复制并执行SageCloud中随文档提供的代码片段。但是我犯了一些错误

sage: B.<a,b,c> = BooleanPolynomialRing
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-ce036e32ef87> in <module>()
----> 1 B = BooleanPolynomialRing; (a, b, c,) = B._first_ngens(3)

AttributeError: 'function' object has no attribute '_first_ngens'
但几行之后,我又被困在这里:

sage: B = BooleanPolynomialRing(3,["a","b","c"])
sage: from sage.sat.converters.polybori import CNFEncoder
sage: from sage.sat.solvers.dimacs import DIMACS
sage: fn = tmp_filename()
sage: solver = DIMACS(filename=fn)
sage: e = CNFEncoder(solver, B)
sage: e.clauses_sparse(a*b + a + 1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-8-0dac365c6fab> in <module>()
----> 1 e.clauses_sparse(a*b + a + Integer(1))
NameError: name 'a' is not defined
sage:B=布尔多项式环(3,[“a”,“B”,“c”])
sage:来自sage.sat.CONVERTORS.polybori进口CNFEncoder
sage:从sage.sat.solvers.dimacs导入dimacs
sage:fn=tmp_filename()
sage:solver=DIMACS(文件名=fn)
sage:e=CNFEncoder(解算器,B)
圣人:e.U.稀疏(a*b+a+1)
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1 e.U稀疏(a*b+a+整数(1))
NameError:未定义名称“a”
我试图更改最后一行,但却出现了另一个错误:

sage: e.clauses_sparse("a*b + a + 1")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-081f32dddbcf> in <module>()
----> 1 e.clauses_sparse("a*b + a + 1")

/projects/sage/sage-6.7/local/lib/python2.7/site-packages/sage/sat/converters/polybori.py in clauses_sparse(self, f)
    284         # any zero block of f+1
    285
--> 286         blocks = self.zero_blocks(f+1)
    287         C = [dict([(variable, 1-value) for (variable, value) in b.iteritems()]) for b in blocks ]
    288

TypeError: cannot concatenate 'str' and 'int' objects
sage:e.parse(“a*b+a+1”)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1 e.条款稀疏(“a*b+a+1”)
/项目/sage/sage-6.7/local/lib/python2.7/site-packages/sage/sat/converters/polybori.py(self,f)
284#f+1的任何零块
285
-->286块=自零块(f+1)
287 C=[dict([(变量,1-值)表示b中的(变量,值)。iteritems()]表示b中的块]
288
TypeError:无法连接'str'和'int'对象

我被这个问题困扰,在文档中找不到任何帮助(除了我无法使用的代码)

你忘记了括号。而不是

sage: B.<a,b,c> = BooleanPolynomialRing
其中第一行设置显示名称 多项式变量a,b,c, 第二行创建Python变量 使用这些多项式变量的值

如果要在.py文件中定义它, 您需要显式语法和适当的导入

sage: B.<a,b,c> = BooleanPolynomialRing
sage: B.<a,b,c> = BooleanPolynomialRing()
sage: B = BooleanPolynomialRing(3,['a','b','c'])
sage: a, b, c = B.gens()