Comment puis-je activer une chaîne telle que "+" dans l'opérateur plus? Merci!Transformez la chaîne en opérateur
Répondre
Utilisez une table de recherche:
import operator
ops = { "+": operator.add, "-": operator.sub } # etc.
print ops["+"](1,1) # prints 2
Vous pouvez essayer d'utiliser eval(), mais il est dangereux si les chaînes ne viennent pas de vous. Sinon vous pouvez envisager de créer un dictionnaire:
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
etc ... puis appeler
ops['+'] (1,2)
ou, pour les entrées utilisateur:
if ops.haskey(userop):
val = ops[userop](userx,usery)
else:
pass #something about wrong operator
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()))
En python3, ceci donne: '+': operator.add, AttributeError: l'objet 'str' n'a pas d'attribut 'ajouter' –
Le problème est que le 'opérateur 'mal nommé les conflits de paramètres avec le module opérateur importé. Je suppose que vous avez mis en ligne 'get_operator_fn' avec' eval_binary_expr'. Changez le paramètre 'operator' en quelque chose d'autre, comme' oper', et toutes les références à celui-ci. Voir ma modification. – PaulMcG
Pour Python3, vous devrez également changer 'operator.div' en' operator.truediv' et corriger toutes les instructions d'impression. – PaulMcG
À mon avis, la réponse proposée par Amnon est le bon.
Cependant, vous pouvez également être intéressé par cet article sur un analyseur mathématique: http://effbot.org/zone/simple-top-down-parsing.htm
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/18628184) – xgord
Cela appartient à la section des commentaires car ce n'est pas une réponse directe. – Pablo
Il existe une méthode magique correspondant à chaque opérateur
OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}
def apply_operator(a, op, b):
method = '__%s__' % OPERATORS[op]
return getattr(b, method)(a)
apply_operator(1, '+', 2)
cela fonctionne bien, merci pour le partage. pour la validation, nous pouvons étendre apply_operator. si op == '/' et b == 0: \t retour np.inf si op == '/' et a == 0: \t return 0 – iratzhash
Cela ne laisse pas [NotImplemented] (https: //docs.python.org/3/library/constants.html#NotImplemented) fonctionne correctement. – wim
- 1. Transformez la chaîne en image avec jQuery
- 2. Transformez l'image rectangulaire en trapèze
- 3. erreur en utilisant la chaîne CSV avec opérateur IN
- 4. Transformez 1 Boucle C++ en 2
- 5. Transformez une bande dessinée en iphone webapp
- 6. Transformez le répertoire en Zip avec PHP
- 7. Modificateur Smarty - Transformez les URL en liens
- 8. Transformez ce javascript en équivalent jQuery
- 9. % opérateur dans python sur chaîne
- 10. iPhone/Objective-C - transformez la voix "en direct"
- 11. opérateur << travailler Surcharge pour chaîne
- 12. Transformez un panneau en cercle en C# Visual Studio 2010
- 13. F opérateur # chaîne explose sur GUIDs
- 14. pipe (|) opérateur en Java
- 15. opérateur polymorphes [] la mise en œuvre
- 16. opérateur d'affectation en C++
- 17. opérateur surcharge en C++
- 18. C# en surcharge opérateur
- 19. Transformez les lignes en colonnes dans XSL: FO
- 20. cet opérateur en javascript
- 21. Surcoupe = opérateur en C++
- 22. = & opérateur en PHP
- 23. + \ opérateur en Python
- 24. opérateur OR en C#
- 25. opérateur Conversion en ENUM
- 26. opérateur Surcharger en C
- 27. Transformez l'image en utilisant seulement 4 points dans ActionScript
- 28. Détection d'une chaîne numérique ou d'une chaîne opérateur/lettre en PHP?
- 29. Opérateur flip flop en perl
- 30. Opérateur de coalescence en C#?
à la place, vous pouvez convertir d'autres choses à chaîne et d'évaluer http : //stackoverflow.com/questions/729248/python-eval-and-globals – Xinus