2013-04-30 6 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

btw вы знаете '^' для побитового XOR – jamylak

ответ

3

Ну, в Python 2.x int/intвсегда возвращает integer. Используйте Python 3 или явно напишите один из аргументов как float, например. 2.0/10, или (как напоминает нам Marjin Pieters), импортируйте явное поведение поведения с Py3 как: from __future__ import division.

+2

Или добавьте 'из __future__ import division'. –

+0

@MartijnPieters Действительно, спасибо за упоминание, я всегда забываю об этом :) –

+0

@BasicWolf nvm Я не видел второго примера. и он сказал, что «х» было целым числом, но он, должно быть, солгал. например. '>>> x = 5' ' >>> formula = "(2/10^8 * x^2) + 0.0131 * x-1017.3-30" ' ' >>> eval (формула) ' ' - 1005.2344999999999' В Python 3, который не работает, во всяком случае, это то, что я думал, когда я увидел второй пример, я понял, что OP lied – jamylak

Смежные вопросы