Ainsi, le code ci-dessous prend une chaîne d'informations entrées (expression mathématique) et utilise la fonction find pour trouver l'un des opérateurs dans "*/+ -" et sépare la chaîne en conséquence .Python: Utilisation de la fonction find non dans l'ordre
def splitting1(z):
for operators in "*/+-":
if operators in z:
position1= z.find(operators)
position2= z.rfind(operators)
text_before_operators= (z[:position1]).strip()
text_after_operators= (z[(position1+1):(position2)]).strip()
return text_before_operators,text_after_operators
Mon problème est que si j'ai une expression entrée tels que 3/5*7
puis position1
va d'abord trouver *
avant de trouver /
. Je veux que le code associe 'position1' à l'opérateur le plus à gauche. Existe-t-il un moyen d'omettre la priorité des opérateurs lors de l'utilisation des fonctions for/in? Sinon, existe-t-il un meilleur manipulateur de chaîne qui peut omettre l'ordre de priorité.
Remarque z est l'entrée. Et l'entrée est limitée à deux opérateurs au cas où cela créerait une ambiguïté.
note: operator est un nom de module, ce qui peut être considéré comme une mauvaise pratique pour l'utiliser dans votre fonction. –
merci, mal changer que – SeesSound
si vous essayez d'évaluer une expression mathématique, ce n'est pas comment c'est fait. Lisez votre entrée de manière séquentielle, divisez-la en jetons (nombres, opérateurs) et placez les jetons dans les «positions» correctes en utilisant un algorithme d'analyse, comme le triage ou le top-down. – georg