Попробуйте все возможные размещения скобок на математическом расчете - PullRequest
0 голосов
/ 24 октября 2019

поэтому у меня есть список с числовыми и математическими операторами.

number = ['10', '6', '2', '6', '3', '1'] 
operators = ['+', '*', '//, -,'+']

Затем я строю свое утверждение следующим образом:

calculation = num[0] + operator[0] + num [1] ...

Теперь я взял найденную здесь функцию для генерации всехдействительная скобка.

def parens(left, right, string):
    if left == 0 and right == 0:
        arr.append(string)

    if left > 0:
        parens(left - 1, right + 1, string + "(")

    if right > 0:
        parens(left, right - 1, string + ")")

Это теперь выплевывает список, называемый круглыми скобками, который содержит все комбинации

Одна из возможных комбинаций теперь [(((((())))))], теперь я поместил его в уравнение вот так.

 for index_paranthesis in range(0, 12, 2):    # Steps of two, to get all uneven parenthesis
    calculation += parenthesis[index_paranthesis] 

    calculation += number[i_number]
    i_number += 1

    calculation += parenthesis[index_paranthesis + 1] #to get the even indexed parenthesis

    calculation += operators[i_operator]
    i_operator += 1

Итак, после этого я получаю первую комбинацию скобок, такую ​​как

calculation = (10(+(6(*(2(//)6)-)3)+)1)

Итак, проблема в том, что с eval (вычислением). Это говорит о том, что это синтаксическая ошибка. Я знаю, что это проблема, но мой вопрос заключается в том, как получить все комбинации функциональных скобок и применить их. Спасибо за ваше время все готово, и я надеюсь, что вы можете мне помочь.

1 Ответ

1 голос
/ 24 октября 2019

Вы можете просто использовать подход «проще просить прощения, чем разрешения» и заключить свой eval в попытку / исключить.

try:
    eval(expression)
except SyntaxError:
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...