Я не анализирую фактические переменные в этом, но он должен быть в состоянии сделать то, что вы просите.Сначала он оценивает 0-й приоритет, затем оценивает 1-й, основываясь на 0-м и т. Д.Я только проверил это на 2 приоритета, но я считаю, что это должно работать для всех.Вот как он работает.
['A', '!=', 'A', 'AND', 'B', '==', 'B']
[False, 'AND', True]
[False]
Вот фактический код:
import operator
ops = {
"AND": operator.and_,
"OR": operator.or_,
"==": operator.eq,
"!=": operator.ne,
"<": operator.lt,
"<=": operator.le,
">": operator.gt,
">=": operator.ge
}
prior = {
"AND": 1,
"OR": 1,
"==": 0,
"!=": 0,
"<": 0,
"<=": 0,
">": 0,
">=": 0
}
maxPrior = 1
def parseEval(string):
content = string.split()
for priorMode in range(maxPrior+1):
print(content)
subParse = []
subParse = []
for ind,cont in enumerate(content):
if cont in ops:
priorLev = prior[cont]
if priorLev <= priorMode:
condA = content[ind-1]
condB = content[ind+1]
subParse.append(ops[cont](condA,condB))
else:
subParse.append(cont)
content = subParse
print(content)
return subParse[0]
parseEval("A != A OR B == B")
Если вы хотите, вы можете сделать операции и до внутри функции.Также извините, мне следовало дать тем, кто обозначает приоритет, лучшее имя, так как оно звучит как другое слово.Извините, если это дало путаницу.Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать, я рад помочь!