计算不带'*';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}