dobra sada odpovedi je k videni na https://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string
me se tam nejvic libi reseni s AST On Wed, Aug 22, 2018 at 11:16 AM starenka . <staren...@gmail.com> wrote: > Zalezi na slozitosti vyrazu, ale obcas staci dobrej regular a namapovat > operatory na operator.* > > Tady sem to ukazoval na LT na pyvu > https://github.com/aleszoulek/pyvo-stdlib-gems-notebooks/blob/master/04_starenka_heges.ipynb > > ----- > 'aknerats'[::-1] > > On Wed, Aug 22, 2018, 11:12 Petr Viktorin <encu...@gmail.com> wrote: > >> On 08/22/18 09:30, Petr Blahos wrote: >> > 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. >> >> Ahoj, >> >> tl;dr: použij pyparsing, viz: >> https://github.com/pyparsing/pyparsing/blob/master/examples/fourFn.py >> >> >> Delší odpověď: >> Vidím tři hlavní možnosti. >> >> 1. Pokud věříš uživatelům (např. píšeš to pro sebe), dej jim prostě k >> dispozici celý Python. V budoucnu ti poděkují. >> Nevýhoda je že jde napsat výraz který ti např. zformátuje disk... >> Můžeš použít eval(), která vyhodnotí jeden výraz, nebo možná lépe exec() >> na sadu příkazů. >> >> >>> namespace = {"VAR1": 54, "VAR2": 8, "VAR3": 982} >> >>> expr = """R=1000*(VAR1+VAR2/2)-VAR3""" >> >>> exec(expr, namespace) >> >>> namespace["R"] >> 57018.0 >> >> >> 2: Často uvidíš lidi používat či doporučovat compile() nebo modul `ast`. >> Doporučuju se jim vyvarovat: jsou to implementační detaily vázané na >> konkrétní verzi CPythonu. Až vyjde nový Python, takový kód může rozbít, >> a za dva roky budeš těžko mít náladu a čas to opravit (nemluvě o >> udržování a testování kompatibility s dnešní verzí). >> Tyhle věci jsou dobré na studium toho, jak Python uvnitř funguje, ne na >> implementaci kalkulačky. >> >> >> 3. Napiš parser. Doporučuju vybrat nějakou udržovanou knihovnu, spíš než >> vzít z internetu něčí úkol do hodiny algoritmů :) >> Pyparsing není ideální (co je?), ale funguje a kalkulačku má jako ukázku >> použití. >> _______________________________________________ >> 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 >
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz