我有一个关于字符串内数学表达式求值的问题。
例如我的字符串如下:
my_str='I have 6 * (2 + 3) apples'
我想知道如何评估这个字符串并得到以下结果:
'I have 30 apples'
有什么办法可以做到这一点吗?
提前致谢。
附:蟒蛇的eval
函数在这种情况下没有帮助。当尝试使用以下方法进行评估时,它引发了错误eval
功能。
这是我的尝试:
>>> import string
>>> s = 'I have 6 * (2+3) apples'
>>> symbols = '^*()/+-'
>>> formula = [(x,s.index(x)) for x in s if x in string.digits+symbols]
>>> result = eval(''.join(x[0] for x in formula), {'__builtins__':None})
>>> s = s[:formula[0][1]] + str(result) + s[formula[-1][1]+1:]
>>> s
'I have 30 apples'
Notes:
这很简单,它不会处理复杂的方程——比如那些带有平方根、圆周率等的方程,但我相信它符合问题所在的精神。为一个really强有力的答案参见jeffery_the_wind 发布的问题 https://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string;但我认为对于这个简单的案例来说这可能有点过分了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)