Как рассчитать математическую задачу из списка в Python? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть список в Python, который выглядит примерно так:

list = [5, "-", 4, "*", 8]

Я хотел бы вычислить математическую задачу в списке так:

anwser = 5 - 4 * 8

Итак, переменная "anwser "-27.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Это то, что вы называете инфиксной нотацией (https://en.wikipedia.org/wiki/Infix_notation)

. Вы можете использовать стек для оценки. Я нашел здесь суть, которая может помочь (https://gist.github.com/nava45/6333409#file-infix-expression-evaluation)

0 голосов
/ 10 февраля 2019

Оценка уравнения с приоритетом операций требует синтаксического анализатора.

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

Код

import operator

ops = {
    '-': operator.sub,
    '+': operator.add,
    '*': operator.mul,
    '/': operator.truediv
}

def parse_mult(equation):
    equation = iter(equation)
    value = next(equation)
    for token in equation:
        if token == '*' or token == '/':
            op = ops[token]
            value = op(value, next(equation))
        else:
            yield value
            yield token
            value = next(equation)
    yield value

def parse(equation):
    equation = parse_mult(equation)
    value = next(equation)
    for token in equation:
        op = ops[token]
        value = op(value, next(equation))
    return value

Пример

equation_list = [5, "-", 4, "*", 8]
print(parse(equation_list))

Выход

-27

Если вам когда-либо понадобится проанализировать уравнения с более чем двумя уровнями приоритета, чемвнешний инструмент разбора может стать необходимым.

0 голосов
/ 10 февраля 2019

Это будет работать:

eval(''.join([str(x) for x in list]))

Но будьте осторожны , используя eval!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...