2013-10-14 2 views
0

При решении проблем на SPOJ я столкнулся с проблемой, которая требовала от программиста оценки выражения без использования приоритета. Это означает, что:Подавление приоритета оператора в Python

2 + 3 * 6=30 and not 20

Есть ли способ сделать это?
Есть ли какая-либо библиотека или встроенная функция для этого?

+0

Поместите открытую круглую скобку после каждого оператора и закройте все в конце перед использованием eval. Но, вероятно, проблема требует, чтобы вы реализовали свой собственный синтаксический анализатор, где не нужно иметь дело с приоритетом, это большое облегчение. –

+0

@MatteoItalia Что вы имеете в виду открытые круглые скобки после каждого оператора? Разве это не укрепило бы приоритет? Можете ли вы привести пример? –

+1

Извините, я имел в виду обратное (все открытые круглые скобки в начале, закрывающие каждый из них перед каждым оператором); это обеспечит необходимый приоритет. Но опять-таки, точка такого упражнения отличается, вы не должны использовать eval & co., Но реализуете свой собственный простой парсер. –

ответ

2

Я думаю, вы могли бы сделать что-то вроде (2 + 3) * 6, но это уродливо. Я не думаю, что для этого есть реальное решение. Пока ... Вы хотите написать свою собственную функцию. Это должно было бы сделать примерно так:

def functionname(strng): 
    strng = strng.split()[::-1] 
    startval = strng.pop() 
    while len(strng): 
     op = strng.pop() 
     val = strng.pop() 
     startval = str(eval(startval + op + val) 
    return startval 

Это тоже не идеально, но это лучше, чем ничего, я думаю.

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