2013-04-30 59 views
0

我需要解决一些数学方程,像下面(但每次不同的公式):为什么Pythons eval()错误?

formula="(2/10^8*x^2)+0.0131*x-1017.3-30" 

其中x是整数。

我用eval()函数来解决问题。功能给了我一个例外:

TypeError: unsupported operand type(s) for ^: 'float' and 'int' 

我解决了它这样的:

formula=formula.replace('^','**') 

现在,我遇到的另一问题。

eval("2/10") 

回报0,而不是我需要0.2,结果我得到一个错误的结果。 我很欣赏任何答案。

+2

顺便说一句,你知道'^'是按位XOR – jamylak 2013-04-30 12:04:58

回答

3

那么,在Python 2.x int/int总是返回一个integer。使用Python 3或将其中一个参数明确写为float,例如或者(如Marjin Pieters提醒我们的那样),导入明确的类似Py3的分裂行为:from __future__ import division

+2

或者添加'from __future__ import division'。 – 2013-04-30 12:00:08

+0

@MartijnPieters的确,感谢提及,我总是倾向于忘记:) – 2013-04-30 12:00:40

+0

@BasicWolf nvm我没有看到第二个例子。他说'x'是一个整数,但他肯定是撒谎的。例如。 >>> >>>公式=“(2/10^8 * x^2)+ 0.0131 * x-1017.3-30”' >>> >>> eval(公式)' ' 1005.2344999999999'在Python 3中不起作用,无论如何,这就是我认为的,当我看到第二个例子时,我意识到了OP撒谎 – jamylak 2013-04-30 12:01:49