J'ai une liste en python qui ressemble à ceci:
anwser = 5 - 4 * 8
Je voudrais calculer le problème mathématique dans la liste donc:
list = [5, "-", 4, "*", 8]
3 Réponses :
C'est ce que vous appelez une notation Infix ( https://en.wikipedia.org/wiki/ Infix_notation )
Vous pouvez utiliser une pile pour l'évaluer. J'ai trouvé ici l'essentiel qui pourrait aider ( https: //gist.github .com / nava45 / 6333409 # file-infix-expression-evaluation )
L'évaluation d'une équation avec la priorité des opérations nécessite un analyseur.
Heureusement, l'écriture d'un analyseur pour l'arithmétique de base, c'est-à-dire l'addition et la multiplication, peut être réalisée assez simplement sans l'utilisation d'outils d'analyse.
-27
equation_list = [5, "-", 4, "*", 8] print(parse(equation_list))
import operator ops = { '-': operator.sub, '+': operator.add, '*': operator.mul, '/': operator.truediv } def parse_mult(equation): equation = iter(equation) value = next(equation) for token in equation: if token == '*' or token == '/': op = ops[token] value = op(value, next(equation)) else: yield value yield token value = next(equation) yield value def parse(equation): equation = parse_mult(equation) value = next(equation) for token in equation: op = ops[token] value = op(value, next(equation)) return value
Si vous devez jamais analyser des équations avec plus de deux niveaux de priorité, alors qu’un outil d’analyse externe peut devenir nécessaire.
Double possible de Évaluer les équations mathématiques à partir d'une entrée utilisateur non sécurisée dans Python a>
N'utilisez PAS
eval () code>
pour cela - il est dangereux et sujet aux erreurs.Analysez-le dans un arbre d'expression. Parcourez l'arbre et évaluez. La réponse pourrait également être 8, selon la manière de mettre en œuvre les règles de priorité.