Ell*_*lle 32 python string math
假设我有一个标准的Python字符串(例如从中获取的字符串raw_input()),可能"2 + 2"是为了简单起见.
我想将这个字符串转换为Python中的标准数学运算,这样"2 + 2"就会返回4.
有没有一种简单的方法可以做到这一点,或者我是否必须拆分空格并手动解析每个数字/符号,然后根据我发现的数据进行数学运算?
我想要正则表达式吗?
Mic*_*ers 54
使用eval函数.
print eval('2 + 4')
Run Code Online (Sandbox Code Playgroud)
输出:
6
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用变量或常规python代码.
a = 5
print eval('a + 4')
Run Code Online (Sandbox Code Playgroud)
输出:
9
Run Code Online (Sandbox Code Playgroud)
您还可以获得返回值:
d = eval('4 + 5')
print d
Run Code Online (Sandbox Code Playgroud)
输出:
9
Run Code Online (Sandbox Code Playgroud)
或者呼叫功能:
def add(a, b):
return a + b
def subtract(a, b):
return a - b
a = 20
b = 10
print eval('add(a, b)')
print eval('subtract(a, b)')
Run Code Online (Sandbox Code Playgroud)
输出:
30
10
Run Code Online (Sandbox Code Playgroud)
如果你想编写一个解析器,也许你可以构建一个python代码生成器,如果这更容易并使用eval来运行代码.使用eval,您可以执行任何Python评估.
另一方面,正如其他人所提到的那样,eval并不安全,所以明智地使用它.
最简单的方法是使用eval如下:
>>> eval("2 + 2")
4
Run Code Online (Sandbox Code Playgroud)
注意我在字符串中包含空格的事实.eval将执行一个字符串就好像它是一个Python代码一样,所以如果你想让输入是Python以外的语法,你应该自己解析字符串并计算,例如eval("2x7")不会给你14因为Python *用于乘法运算符而不是比x.
如果你想安全地做,你可能想使用http://docs.python.org/library/ast.html#ast.literal_eval
从这个回答: Python"安全"eval(字符串到bool/int/float/None/string)
它可能不会进行数学运算,但您可以解析数学运算符,然后对安全评估的术语进行操作.
您可以使用与该功能相同的eval()功能,但使用功能的方式很简单。
def numeric(equation):
if '+' in equation:
y = equation.split('+')
x = int(y[0])+int(y[1])
elif '-' in equation:
y = equation.split('-')
x = int(y[0])-int(y[1])
return x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88125 次 |
| 最近记录: |