from operator import gt, ge, lt, le, eq, ne
def compare(expression):
parts = expression.split()
if len(parts) != 3:
raise Exception("Can only call this with 'A comparator B', like 1 > 2")
a, comp, b = parts
try:
a, b = float(a), float(b)
except:
raise Exception("Comparison only works for numerical values")
ops = {">": gt, '<': lt, '>=': ge, '<=': le, '==': eq, '!=': ne}
if comp not in ops:
raise Exception("Can only compare with %s" % (", ".join(ops)))
return ops.get(comp)(a, b)
def run_comp(expression):
try:
print("{} -> {}".format(expression, compare(expression)))
except Exception as e:
print str(e)
if __name__ == "__main__":
run_comp("1.0 > 2")
run_comp("2.0 > 2")
run_comp("2 >= 2")
run_comp("2 <= 1")
run_comp("5 == 5.0")
run_comp("5 <= 5.0")
run_comp("5 != 5.0")
run_comp("7 != 5.0")
run_comp("pig > orange")
run_comp("1 ! 2")
run_comp("1 >")
如果您只是比较数值,这种方法通常会更安全。在
这也可以用于非数值。在
输出
^{pr2}$这就是
eval
的目的。在不过,请注意
eval
。它将调用提供给它的任何函数。比如os.system('rm -rf /')
:/相关问题 更多 >
编程相关推荐