exec cos (x) останавливает программу, если x не в [-9,9] - PullRequest
0 голосов
/ 01 декабря 2011
from math import *

def solution_handler(self, input):                                                                                                                                                                                        
    while re.search(r'(?<!\.)(\d+)(?!\.)(\d*)', input):
        rx = re.search(r'(?<!\.)(\d+)(?!\.)(\d*)', input)
        input = input[:rx.start()] + rx.group() + ".0" + input[rx.end():]
    exec "solution = " + input
    return solution

Это код, который я использую для решения уравнений, введенных в калькулятор, над которым я работаю.Кажется, в большинстве случаев он работает нормально, но если я попытаюсь ввести функцию (cos, sin и т. Д.) Со значением за пределами [-9,9], программа зависнет.

Что произошлоЯ делаю неправильно?

Пример строки:

  • exec "solution = " + "6*cos(6)" -> solution = 5.761 ...
  • exec "solution = " + "7/cos(8/2)" -> solution = -10.709 ...
  • exec "solution = " + "sin(12) + 3" -> Freeze
  • exec "solution = " + "abs(-50) / 2" -> Freeze

Кажется, дело обстоит с любой функцией, которую я пытаюсь использовать.

1 Ответ

2 голосов
/ 01 декабря 2011

Проблема с вашим циклом: удалите exec, и он все равно зависнет. Попробуйте вместо этого:

from __future__ import division
from math import *
def solution_handler(self, input):
    return eval(input)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...