Python if-statement with variable mathematical ope

2019-01-26 04:38发布

I'm trying to insert a variable mathematical operator into a if statement, an example of what I'm trying to achieve in parsing user-supplied mathematical expressions:

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"

obviously the above fails with SyntaxError: invalid syntax. I've tried using exec and eval but neither work in an if statement, what options do I have to get around this?

3条回答
We Are One
2楼-- · 2019-01-26 04:43

I've tried using exec and eval but neither work in an if statement

For the sake of completeness it should be mentioned that they do work, even if the posted answers provide a better solution. You'll have to eval() the whole comparison, not just the operator:

maths_operator = "=="

if eval('"test"' + maths_operator '"test"'):
       print "match found"

or exec the line:

exec 'if "test"' + maths_operator + '"test": print "match found"'
查看更多
疯言疯语
3楼-- · 2019-01-26 04:51

Use the operator module:

import operator
op = operator.eq

if op("test", "test"):
   print "match found"
查看更多
叛逆
4楼-- · 2019-01-26 04:52

Use the operator package together with a dictionary to look up the operators according to their text equivalents. All of these must be either unary or binary operators to work consistently.

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"
查看更多
登录 后发表回答