Amn*_*non 78
使用查找表:
import operator
ops = { "+": operator.add, "-": operator.sub } # etc.
print ops["+"](1,1) # prints 2
Run Code Online (Sandbox Code Playgroud)
Pau*_*McG 15
import operator
def get_operator_fn(op):
return {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.div,
'%' : operator.mod,
'^' : operator.xor,
}[op]
def eval_binary_expr(op1, oper, op2):
op1,op2 = int(op1), int(op2)
return get_operator_fn(oper)(op1, op2)
print eval_binary_expr(*("1 + 3".split()))
print eval_binary_expr(*("1 * 3".split()))
print eval_binary_expr(*("1 % 3".split()))
print eval_binary_expr(*("1 ^ 3".split()))
Run Code Online (Sandbox Code Playgroud)
小智 7
如何使用查找字典,但使用 lambdas 而不是运算符库。
op = {'+': lambda x, y: x + y,
'-': lambda x, y: x - y}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
print(op['+'](1,2))
Run Code Online (Sandbox Code Playgroud)
它会输出:
3
Run Code Online (Sandbox Code Playgroud)
每个操作符都有一个对应的魔术方法
OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}
def apply_operator(a, op, b):
method = '__%s__' % OPERATORS[op]
return getattr(b, method)(a)
apply_operator(1, '+', 2)
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用eval(),但如果字符串不是来自您,则会很危险.否则你可以考虑创建一个字典:
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
Run Code Online (Sandbox Code Playgroud)
等...然后打电话
ops['+'] (1,2)
Run Code Online (Sandbox Code Playgroud) 或者,对于用户输入:if ops.haskey(userop):
val = ops[userop](userx,usery)
else:
pass #something about wrong operator
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47927 次 |
最近记录: |