math运算从string
假设我有一个标准的Pythonstring(比如从raw_input()获得的),为了简单起见,也许是"2 + 2" 。 
 我想将这个string转换为Python中的标准math运算,例如"2 + 2"将返回4 。 
有没有一个简单的方法来做到这一点,或者我将不得不分裂的空间和手动parsing每个数字/符号,然后根据我find的math呢?
我需要Regex吗?
使用eval函数。
 print eval('2 + 4') 
输出:
 6 
你甚至可以使用variables或常规的Python代码。
 a = 5 print eval('a + 4') 
输出:
 9 
你也可以得到返回值:
 d = eval('4 + 5') print d 
输出:
 9 
或者调用函数:
 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)') 
输出:
 30 10 
如果你想写一个parsing器,也许你可以build立一个Python代码生成器,如果更容易,使用eval来运行代码。 用eval你可以执行任何Python评估。
另一方面,正如其他人所说,eval是不安全的,所以明智地使用它。
正则expression式不会有太大帮助。 首先,你要考虑到运算符的优先级,其次,你需要使用正则expression式不可能的圆括号。
根据你需要parsing什么types的expression式,你可以尝试Python AST或(更可能) pyparsing 。 但是,首先,我build议阅读一些有关语法分析的内容,尤其是关于调车码algorithm 。
 并且抵制使用eval的诱惑,那是不安全的。 
 最简单的方法是使用eval如下所示: 
  >>> eval("2 + 2") 4 
 注意我在string中包含空格的事实。  eval将执行一个string,就像它是一个Python代码一样,所以如果你希望input的语法不是Python,你应该自己parsingstring并计算,例如eval("2x7")不会给你14因为Python使用乘法运算符而不是x 。 
如果您想安全地使用它,您可能需要使用http://docs.python.org/library/ast.html#ast.literal_eval
从这个答案: Python“安全”eval(string到布尔/整数/浮动/无/string)
它可能不会做math,但是你可以parsingmath运算符,然后运行安全评估的术语。
提问者评论道:
我认为,如果我理解一个问题的程度足以编写一个可以算出来的程序,我不需要手动完成这个工作。
 如果他正在写mathexpression式求解器作为学习练习,那么使用eval()是不会有帮助的。 另外这是可怕的devise。 
您可以考虑使用逆波兰符号而不是标准的math符号来制作一个计算器。 它大大简化了parsing。 这仍然是一个很好的练习
 你可以使用这个函数,它和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 
 一个简单的方法,但这样做的危险的方法是使用eval() 。  eval()执行传递给它的string作为代码。 这样做的危险之处在于,如果这个string是从用户input中获得的,他们可能会恶意执行可能破坏计算机的代码。 我会得到input,用正则expression式检查它,然后执行它,如果你确定是否可以。 如果只是格式“数字操作号码”,那么你可以使用一个简单的正则expression式: 
 import re s = raw_input('What is your math problem? ') if re.findall('\d+? *?\+ *?\d+?', s): print eval(s) else: print "Try entering a math problem" 
否则,你将不得不拿出比这更严格的东西。 你也可以反过来用一个正则expression式来查找是否有某些东西不在其中,比如数字和操作。 你也可以检查input是否包含某些命令。
最好的办法是做:
 print eval("2 + 2") 
如果你想要你可以使用一个variables:
 addition = eval("2 + 2") print addition 
如果你真的想,你可以使用一个函数:
 def add(num1, num2): eval("num1 + num2")