繁体   English   中英

如何让 Sympy 解析表达式,同时仅将任意先前定义的字符串视为符号?

[英]How do I let Sympy parse an expression while only regarding arbitrary previously defined strings as symbols?

所以我想要做的是编写一个脚本,让我输入一些函数和其中的变量列表,然后将其处理到其他一些公式中,计算结果,然后将新公式和结果输出为 Latex代码。 只要我只输入不包含“^”、“{”或“}”的变量,一切都正常。 问题是,我想使用,或者至少,完全按照我在 Latex 文档中写的名称输出名称,因此它们通常包含这些字符。

我知道 Sympy 中有一个内置的 Latex-Parser,但据我所知,它需要一些其他包(antlr4),我想尽量避免这种情况,因为我打算将脚本分发给我的同伴学生,并且不想添加另一个运行脚本的要求。

所以我想到的是我可以使用变量名称列表(无论如何我将它们连同它们的值一起输入以允许程序计算最终结果):我试图定义一个“转换”,正如它在关于解析的 Sympy 文档。 它看起来像这样:

#Defining the transformation
    def can_split(symbol):
#Check if symbol is in one of the lists of inputted values (the two lists contain tuples of variable names[0] and their corresponding values[1])
        if symbol not in ([i[0] for i in uncertainValues]+[i[0] for i in certainValues]):
             return _token_splittable(symbol)
        return False
    
#Read function definition from TKinter text field, split only by custom defined symbols
    function=parse_expr(functionEntry.get("1.0", "end-1c"),transformations = (split_symbols_custom(can_split)))

问题是,如果我运行这个脚本,并输入例如“a^b*c”,以及变量名“a^b”和“c”,通常应该读作“变量'a^b'乘以使用变量 'c'" 我得到异常:"NameError: name 'a' is not defined"。

如果有人可以帮助我解决这个问题,或者提出另一种正确的方法,我将非常感激。 此外,如果需要更多代码或上下文来找到更好的解决方案,我会提供更多 - 我只是觉得如果我解释整个想法,一切都会变得太冗长。 但正如我所说,如果有帮助,我会很高兴这样做。

快速但肮脏的解决方法:

现在我最终使用了肮脏的方法,在输入时用唯一的字符串替换所有有问题的字符,并在输出之前再次用它们的符号替换它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM