Ahoj, teoreticky nejlepší přístup je vyrobit si parser, který ti ten výraz převede na AST strom, a ten strom pak “provést”, což je vlastně jen průchod do hloubky.
Ten parser si můžeš vyrobit sám implementací nějakého parser algoritmu - vzhledem k tomu, že vstup bude asi celkem malý a gramatika ne moc kompletní, tak je to celkem schůdná cesta. Nebo můžeš použit nějakou knihovnu pro tvorbu parserů (jsou i pro Python), no a nebo můžeš využít přímo parser Pythonu - modul ast. Rozdíl oproti eval() pak bude ten, že bude pod tvoji kontrolou, co to bude dělat, takže hodně snížíš bezpečností rizika. Když trochu pogooglím, tak najdu: https://gist.github.com/ircmaxell/1232629 https://stackoverflow.com/q/114586/196206 https://stackoverflow.com/q/594266/196206 https://gist.github.com/mgood/3276107 ...a spousta dalšího Petr Messner 22. 8. 2018 v 9:30, Petr Blahos <petrbla...@gmail.com>: > Přátelé, > > doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických > výrazů se symboly? Představuju si to asi takto: Budu mít text typu: > expr = """R=1000*(VAR1+VAR2/2)-VAR3""" > > a pak udělám: > result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982}) > > Případně ještě knihovna.zkontroluj_vyraz(expr). > Potřebuju tam opravdu jenom + - * / a závorky. > > Díky, > Petr > -- > http://www.blahos.com/ > http://traceability.cz/ > _______________________________________________ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz