Fonction intégrée eval()
pas recommandé comme go-to, mais est plutôt très utile dans ce cas particulier:
string = "5 + 3 * 4 * 2 + 1"
print (eval(string))
# 30
Bien qu'il existe toute une quantité d'effets secondaires et les risques en utilisant eval()
. Donc, ne pas utiliser assez souvent.
un moyen très utile serait d'extraire les opérateurs et les opérandes séparément, puis de faire l'arithmétique désirée.
operands = [int(x) for x in string if x.isdigit()] # not using re as this is faster
# [5, 3, 4, 2, 1]
operators = re.findall(r"[^\d\s]", string)
# ['+', '*', '*', '+']
Vous pouvez maintenant appliquer les opérateurs aux deux opérandes correspondants dans une fonction. Assurez-vous de garder une bonne convention arithmétique (*
devrait venir avant +
)
en utilisant 'ast.literal_eval()' est un moyen plus sûr de 'eval' –
est-il un moyen de voir le code derrière eval? – Shaw
@Shaw vous pouvez vérifier un peu du code à l'intérieur avec 'import inspect; importer ast; print (inspect.getsource (ast.literal_eval)) ' – Nf4r