我正在尝试使用降价式语言来进行数学运算。基本的想法是有一个文件,你可以写下你的数学,然后有一个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找到。 我没有得到的是为什么一个版本工作,而另一个版本没有。欢迎任何想法。 谢谢。
答案 0 :(得分:0)
根据每条评论,我想出了这个解决方案:
变化:
sp.sympify(eq[1])
为:
sp.sympify(eval(eq[1]))