如何把 python 字符串转换成可直接运行的公式?

2014-05-14 02:46:45 +08:00
 Lucups
比如,输入一个字符串 'sin(x) + 0.6x - 0.3x^2'

如何转换换成可运行的 python 代码?
或者说有没有可以直接运算这种式子的库(给定 x 的值)?

(其实最关键的是能识别 ^ sin cos 这些手写的运算符)

我尝试自己写了,发现情况还是比较复杂的,担心考虑不够周到,找了半天貌似没有合适的库可用。
求推荐。
Thx!
3657 次点击
所在节点    Python
9 条回复
stevenyou
2014-05-14 08:55:00 +08:00
https://github.com/pydata/numexpr/blob/master/README.rst

虽然这个是做并行计算的 但是evaluate() 这个方法可以完成你的要求
cbsw
2014-05-14 09:59:30 +08:00
s = 'sin(x) + 0.6 * x - 0.3 * x **2'
f = lambda x,s: eval(s)
f(pi/4, s)
只能对 python 合法的式子求值
ChiChou
2014-05-14 10:13:22 +08:00
@cbsw 别用 eval 做在线的功能,小心远程代码执行~
cbsw
2014-05-14 10:16:32 +08:00
@ChiChou 是的,这的确很不安全,不过如果仅仅是自己用的话可以算作一种解决方案
Lucups
2014-05-14 11:02:01 +08:00
@stevenyou
@cbsw
@ChiChou
正在按照各位意见尝试。感谢已发送,不小心给
@cbsw
送了两个感谢,请回送一个,哈哈 : )
Lucups
2014-05-14 13:58:06 +08:00
@stevenyou 虽然还是有几个字符需要过滤,不过总体来说没有问题,很满意,非常感谢!~
tonic
2014-05-14 21:11:19 +08:00
...自己写个计算器啊, 我记得大学数据结构讲栈的时候都会讲前中后缀表达式吧, 都会要写个计算机的...
Lucups
2014-05-16 10:08:40 +08:00
@tonic 写一个要考虑的因素太多,另外就是安全性问题,所以不敢轻易下手,用开源的东西比较好一点。等这个项目告一段落就开始重复造轮子~
ericls
2014-05-17 23:42:51 +08:00
python
是有符号运算库的
类似matlab的符号运算

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/112437

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX