Sympy拒绝计算值

2024-03-29 12:59:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用一种类似降价的语言来做数学。基本的想法是有一个文件,你可以写下你的数学,然后有一个python脚本做计算和吐出tex

然而,我面临的问题是,Sympy拒绝吐出值,它只会给我返回等式。更奇怪的是,它确实在一个备用测试脚本中吐出了值,而这个脚本本质上是相同的代码。你知道吗

这是工作代码:

import sympy as sp
m = sp.symbols('m')
kg = sp.symbols('kg')
s = sp.symbols('s')
g = sp.sympify(9.80665*m/s**2)
mass = sp.sympify(0.2*kg)
acc = sp.sympify(g)
F = sp.sympify(mass*acc)
print F

输出:

1.96133*kg*m/s**2

这是无效代码:

import re
import sympy as sp
print 'import sympy as sp'

#read units
mymunits = 'units.mymu'
with open(mymunits) as mymu:
    mymuinput = mymu.readlines()
    for lines in mymuinput:
        lines = re.sub('\s+','',lines).split()
        if lines != []:
            if lines[0][0] != '#':
                unit = lines[0].split('#')[0]
                globals()[unit] = sp.symbols(unit)
                print unit+' = sp.symbols(\''+unit+'\')'

#read constants
mymconstants = 'constants.mymc'
with open(mymconstants) as mymc:
    mymcinput = mymc.readlines()
    for lines in mymcinput:
        lines = re.sub('\s+','',lines).split()
        if lines != []:
            if lines[0][0] != '#':
                constant = lines[0].split('#')[0].split(':=')
                globals()[constant[0]] = sp.sympify(constant[1])
                print constant[0]+' = sp.sympify('+constant[1]+')'

#read file
mymfile = 'test.mym'
with open(mymfile) as mym:
    myminput = mym.readlines()
    #create equations by removing spaces and splitting lines
    for line in myminput:
        line = line.replace(' ','').strip().split(';')
        for eqstr in line:
            if eqstr != '':
                eq = re.split(':=',eqstr)
                globals()[eq[0]] = sp.sympify(eq[1])
                print eq[0]+' = sp.sympify('+eq[1]+')'

print 'print F'
print F

它输出:

acc*mass

它应该输出一个值,就像测试脚本一样。 同一脚本还输出测试脚本中使用的代码。唯一的区别是,在不工作的脚本中,我尝试从输入文件生成代码,如下所示:

mass := 0.2*kg ; acc := g

F := mass*acc

以及单位档案:

#SI

m       #length
kg      #mass
s       #time

和常量:

#constants

g:=9.80665*m/s**2       #standard gravity

整个代码也可以在github上找到。 我不明白的是为什么一个版本有效,而另一个版本无效。任何想法都是受欢迎的。 非常感谢。你知道吗


Tags: 代码脚本ifasunitspmassacc