Comment puis-je transformer une chaîne de caractères telle que "+"
dans l'opérateur plus ?
Réponses
Trop de publicités?
Paul McGuire
Points
24790
import operator
ops = {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.truediv, # use operator.div for Python 2
'%' : operator.mod,
'^' : operator.xor,
}
def eval_binary_expr(op1, oper, op2):
op1, op2 = int(op1), int(op2)
return ops[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())))
Krzysztof Bujniewicz
Points
1343
Vous pouvez essayer d'utiliser eval(), mais c'est dangereux si les chaînes de caractères ne proviennent pas de vous. Sinon, vous pouvez envisager de créer un dictionnaire :
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
etc... et ensuite appeler
ops['+'] (1,2)
ou, pour l'entrée de l'utilisateur :
if ops.haskey(userop):
val = ops[userop](userx,usery)
else:
pass #something about wrong operator
Garrett
Points
91
Vinayak Kaniyarakkal
Points
762