<p>使用<a href="http://docs.sympy.org/0.7.3/tutorial/solvers.html#a-note-about-equations" rel="nofollow">^{<cd1>}</a>,可以为每个方程创建一个类。用<code>ω, π = sp.symbols('ω π')</code>等创建方程的符号,方程本身,然后使用函数<code>f()</code>来完成剩下的工作:</p>
<pre><code>import sympy as sp
# Create all symbols.
P, V, n, R, T = sp.symbols('P V n R T')
# Create all equations
IDEAL_GAS_EQUATION = P*V - n*R*T
def f(x, values_dct, eq_lst):
"""
Solves equations in eq_lst for x, substitutes values from values_dct,
and returns value of x.
:param x: Sympy symbol
:param values_dct: Dict with sympy symbols as keys, and numbers as values.
"""
lst = []
lst += eq_lst
for i, j in values_dct.items():
lst.append(sp.Eq(i, j))
try:
return sp.solve(lst)[0][x]
except IndexError:
print('This equation has no solutions.')
</code></pre>
<p>尝试一下。。。公司名称:</p>
^{pr2}$
<p>如果您没有通过<code>values_dct</code>提供足够的参数,您将得到一个类似<code>3*T/2</code>的结果,检查它的<code>type()</code>,得到<code><class 'sympy.core.mul.Mul'></code>。在</p>
<p>如果您确实提供了结果为<code>6</code>而其类型为<code><class 'sympy.core.numbers.Integer'></code>的所有参数,那么您可以引发异常或任何需要的参数。您还可以使用<code>int()</code>将其转换为int(如果使用<code>3*T/2</code>而不是6,则会引发一个错误,因此您也可以这样测试它)。在</p>
<p>或者,您可以简单地检查<code>values_dct</code>中的<code>None</code>值是否大于1。在</p>
<hr/>
<p>要组合多个方程,例如<code>PV=nRT</code>和<code>P=2m</code>,可以像前面的符号一样创建额外的符号<code>m</code>,并将{<cd17>}分配给新的方程名<code>MY_EQ_2</code>,然后将其插入函数的<code>eq_lst</code>:</p>
<pre><code>m = sp.symbols('m')
MY_EQ_2 = P - 2 * m
vals = {n: 3, R: 1, T:4}
r = f(V, values_dct=vals, eq_lst=[IDEAL_GAS_EQUATION, MY_EQ_2])
print(r) # Prints 6/m
</code></pre>