计算不带'*';python中的符号

计算不带'*';python中的符号,python,expression,symbols,evaluate,Python,Expression,Symbols,Evaluate,我在value.txt中有以下内容: 2A-25X-8A+34X-5B+11B 如果我使用via terminal bash,请参见以下说明: #mf This is METAFONT, Version 2.7182818 (TeX Live 2019/Arch Linux) (preloaded base=mf) **expr (/usr/share/texmf-dist/fonts/source/public/knuth-lib/expr.mf gimme an expr: 2A-25X-

我在
value.txt
中有以下内容:

2A-25X-8A+34X-5B+11B
如果我使用via terminal bash,请参见以下说明:

#mf
This is METAFONT, Version 2.7182818 (TeX Live 2019/Arch Linux) (preloaded base=mf)
**expr
(/usr/share/texmf-dist/fonts/source/public/knuth-lib/expr.mf
gimme an expr: 2A-25X-8A+34X-5B+11B
>> 6B+9X-6A
gimme an expr:
我可以计算表达式,在字母和数字之间不使用“*”符号

我想要的是尽可能干净、经济地使用Python,但仍然不使用“*”。 我还没有找到关于它的任何东西。 我还希望它是一种可以通过open、
print=
r
实现的语法

编辑

一个可能的想法如下:

with open ("value.txt", "r") as value:
    data = value.read()

#some python method for evaluate value.txt expression and save in variable value2

print = (value2)

总是对有关解析算法的问题感兴趣。这是一个基于pyparsing的解决方案(虽然比您希望的要长一点,并且使用的不仅仅是with、open等)

前30行定义了一个用于汇总变量的类,支持加、减和乘整数。(整数建模为带有变量“”的计数。)

接下来的30行定义了实际的解析器,以及将解析的标记转换为累积计数对象的解析时间操作

最后25行是测试,包括示例表达式

解析器真正的“智能”在于
infixNotation
方法,该方法实现了对各种运算符的解析,包括运算符优先级和分组的处理 使用()的。通过将
None
作为乘法运算符,使用“3A”表示“3次A”。这也支持像“2(A+2B)”这样的构造来表示“2A+4B”

给出输出(
runTests
回显每个测试行,后跟解析结果):

要演示如何使用expr解析表达式字符串,请参阅以下代码:

result = expr.parseString("2A-25X-8A+34X-5B+11B")
print(result)
print(result[0])
print(type(result[0]))

# convert back to dict
print({**result[0]})
印刷品:

[-6A+6B+9X]
-6A+6B+9X
<class '__main__.Tally'>
{'B': 6, 'A': -6, 'X': 9}
[-6A+6B+9X]
-6A+6B+9X
{'B':6,'A':-6,'X':9}

您想要一个计算机代数系统。python库
sympy
是一个很好的工具choice@juanpa.arrivillaga我尝试使用不带“*”符号的Symphy,但出现以下错误
SyntaxError:无效语法
。什么?同样,您需要使用计算机代数系统,或者为此实现您自己的解析器和逻辑引擎。python没有内置的功能。或者直接调用您已经在使用的外部程序using@juanpa.arrivillaga到目前为止,我唯一的想法就是调用mf。好吧,这似乎是一个干净的解决方案,使用已经编写的代码来解决您的问题。您可以使用
子进程
调用外部程序hank |)!非常有效,您的解释对于在解析过程中跟踪细节也非常有用。
result = expr.parseString("2A-25X-8A+34X-5B+11B")
print(result)
print(result[0])
print(type(result[0]))

# convert back to dict
print({**result[0]})
[-6A+6B+9X]
-6A+6B+9X
<class '__main__.Tally'>
{'B': 6, 'A': -6, 'X': 9}