Оператор python if с переменным математическим оператором
Привет, я пытаюсь вставить переменный математический оператор в оператор if, пример того, чего я пытаюсь достичь: -
maths_operator = "=="
if "test" maths_operator "test":
print "match found"
maths_operator = "!="
if "test" maths_operator "test":
print "match found"
else:
print "match not found"
очевидно, что это не выполняется с SyntaxError: invalid syntax
. Я пробовал использовать exec и eval, но не работал в инструкции if, какие параметры мне нужно обойти?
Ответы
Ответ 1
Используйте пакет оператора вместе со словарем для поиска операторов в соответствии с их текстовыми эквивалентами. Все они должны быть либо унарными, либо бинарными операторами, чтобы работать последовательно.
import operator
ops = {'==' : operator.eq,
'!=' : operator.ne,
'<=' : operator.le,
'>=' : operator.ge,
'>' : operator.gt,
'<' : operator.lt}
maths_operator = "=="
if ops[maths_operator]("test", "test"):
print "match found"
maths_operator = "!="
if ops[maths_operator]("test", "test"):
print "match found"
else:
print "match not found"
Ответ 2
Используйте модуль operator
:
import operator
op = operator.eq
if op("test", "test"):
print "match found"
Ответ 3
Я пробовал использовать exec и eval, но не работал в выражении if
Для полноты нужно упомянуть, что они действительно работают, даже если опубликованные ответы обеспечивают лучшее решение. Вам нужно будет eval() сравнить все, а не только оператор:
maths_operator = "=="
if eval('"test"' + maths_operator '"test"'):
print "match found"
или выполните строку:
exec 'if "test"' + maths_operator + '"test": print "match found"'