5.2.5. Priorites3
— Évaluation d’une expression calculatoire¶
Le module Priorites3
a pour objectif d’analyser une expression
calculatoire afin d’effectuer l’opération de façon détaillée en respectant les
priorités de calcul. Ce module n’utilise pas d’expressions régulières pour
analyser l’expression, afin de gagner du temps.
Ce module devra à l’avenir prendre également en charge les classes Racine
et Fractions
.
-
pyromaths.outils.Priorites3.
EstNombre
(value)[source]¶ EstNombre(value)
Teste si value est une valeur, c’est à dire un entier, un réel, un polynôme, une fraction, une racine carrée. Attention : (-11) est considéré comme un nombre
Paramètres: value (string) – la valeur à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.EstNombre('-15') True >>> Priorites3.EstNombre('Polynome([[-4, 2]], "x")') True
Type renvoyé: list
-
pyromaths.outils.Priorites3.
cherche_classe
(calcul, index)[source]¶ cherche_classe(calcul, index)
Recherche le premier objet polynôme ou fraction dans la chaîne calcul à une position supérieure ou égale à index, sans expression régulière
Paramètres: - calcul (string) – le calcul à tester
- index (integer) – position à partir de laquelle effectuer le test
>>> from pyromaths.classes.PolynomesCollege import Polynome >>> from pyromaths.classes.Fractions import Fraction >>> from pyromaths.outils import Priorites3 >>> Priorites3.cherche_classe('Polynome([[-4, 2]], "x")-Polynome([[-5, 1], [4, 2], [1, 0]], "x")+Polynome([[6, 0], [5, 1]], "x")', 5) Polynome([[-5, 1], [4, 2], [1, 0]], "x") >>> Priorites3.cherche_classe('Polynome([[-4, 2]], "x")+Fraction(3,2)+Polynome([[6, 0], [5, 1]], "x")', 5) Fraction(3,2)
Type renvoyé: string
-
pyromaths.outils.Priorites3.
cherche_decimal
(calcul, index)[source]¶ cherche_decimal(calcul, index)
Recherche le premier nombre décimal dans la chaîne calcul à une position supérieure ou égale à index, sans expression régulière. Un nombre décimal peut être entouré de parenthèses s’il a un signe, ou avoir un signe s’il est en début de chaîne.
Cette fonction est 130 fois plus rapide qu’avec une expression régulière.
Paramètres: - calcul (string) – le calcul à tester
- index (integer) – position à partir de laquelle effectuer le test
>>> from pyromaths.outils import Priorites3 >>> p = '-Polynome([[-4, 2]], "x")*6**2+3' >>> Priorites3.cherche_decimal(p, 1) 4 >>> p = '-6*(-11)*(-5)' >>> Priorites3.cherche_decimal(p, 1) 6 >>> Priorites3.cherche_decimal(p, 0) 6
TODO : vérifier ces deux derniers exemples. Je pense que je devrais récupérer -6
Type renvoyé: string
-
pyromaths.outils.Priorites3.
cherche_operateur
(calcul, index)[source]¶ cherche_operateur(calcul, min_i)
Recherche le premier opérateur +, -, *, /, ^ dans la chaîne calcul à une position supérieure ou égale à min_i, sans expression régulière.
Paramètres: - calcul (string) – le calcul à tester
- min_i (integer) – position à partir de laquelle effectuer le test
>>> from pyromaths.outils import Priorites3 >>> Priorites3.cherche_operateur('-Polynome([[-4, 2]], "x")*6**2+3', 1) - >>> p = '-6*(-11)*(-5)' >>> Priorites3.cherche_operateur(p, 1) * >>> Priorites3.cherche_operateur(p, 0) -
Type renvoyé: string
-
pyromaths.outils.Priorites3.
effectue_calcul
(calcul)[source]¶ effectue_calcul(calcul)
Effectue une étape du calcul en respectant les priorités
Paramètres: calcul (list) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.effectue_calcul(['-5', '-', '(', '(-6)', '-', '1', '+', '(-3)', ')', '*', '(-1)']) ['-5', '-', '(', '-7', '-', '3', ')', '*', '(-1)'] >>> Priorites3.effectue_calcul(['-5', '-', '(', '-7', '-', '3', ')', '*', '(-1)']) ['-5', '-', '-10', '*', '(-1)'] >>> Priorites3.effectue_calcul(['-5', '-', '-10', '*', '(-1)']) ['-5', '-', '10'] >>> Priorites3.effectue_calcul(['-5', '-', '10']) ['-15'] >>> Priorites3.effectue_calcul(['-', 'Polynome("x-1")', '*', '2']) ['-', '(', 'Polynome([[2, 1]], "x", 0)', '+', 'Polynome([[-2, 0]], "x", 0)', ')'] >>> Priorites3.effectue_calcul(['4', '*', 'Polynome("x+1")', '**', '2']) ['4', '*', '(', 'Polynome([[1, 1]], "x", 0)', '**', '2', '+', '2', '*', 'Polynome([[1, 1]], "x", 0)', '*', 'Polynome([[1, 0]], "x", 0)', '+', 'Polynome([[1, 0]], "x", 0)', '**', '2', ')']
Type renvoyé: list
-
pyromaths.outils.Priorites3.
plotify
(calcul)[source]¶ plotify(calcul)
Convertit la chaîne de caractères calcul contenant des polynômes une chaîne de caractères au format psplot
TODO : intégrer cela dans
outils.Affichage
et gérer l’ensemble des classes de Pyromaths.Paramètres: calcul (string) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.plotify('Polynome([[Fraction(-5, 192), 4], [Fraction(2, 96), 3], [Fraction(41, 48), 2], [Fraction(-7, 12), 1], [-4, 0]], "x", False)') -5/192*x^4+2/96*x^3+41/48*x^2-7/12*x^1-4
Type renvoyé: str
-
pyromaths.outils.Priorites3.
priorites
(calcul)[source]¶ priorites(calcul)
Effectue un enchaînement d’opérations contenues dans calcul en respectant les priorités et en détaillant les étapes.
Paramètres: calcul (string) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.priorites('-1+5-(-5)+(-6)*1') [['4', '+', '5', '-', '6'], ['9', '-', '6'], ['3']] >>> Priorites3.priorites('-5**2+6') [['-', '25', '+', '6'], ['-25', '+', '6'], ['-19']] >>> Priorites3.priorites('Polynome([[Fraction(6, 7), 0]], "x")*Polynome([[Fraction(1,3), 1], [1,0]], "x")') [['Polynome([[Fraction(6, 21, "s"), 1]], "x", 0)', '+', 'Polynome([[Fraction(6, 7), 0]], "x", 0)'], ['Polynome([[Fraction(2, 7), 1], [Fraction(6, 7), 0]], "x", 0)']] >>> Priorites3.priorites('-Fraction(-6,1)/Fraction(-4,1)') [['-', '(', 'Fraction(-6, 1)', '*', 'Fraction(1, -4)', ')'], ['-', 'Fraction("2*-3", "2*-2", "s")'], ['Fraction(-3, 2)']]
Type renvoyé: list
-
pyromaths.outils.Priorites3.
recherche_fin_operation
(calcul, op, l_interdit, debut)[source]¶ recherche_fin_operation(calcul, op, l_interdit, debut)
Recherche la fin de la suite d’opération @op situé à la position @debut de la liste de calculs @calcul, en vérifiant que cet enchaînement n’est pas suivi par un opérateur compris dans @l_interdit.
Paramètres: - calcul (string) – le calcul à traiter
- op (string) – l’opérateur à chercher
- l_interdit (list) – liste des opérateurs à ignorer, pour respecter les priorités
- debut (integer) – À partir d’où chercher l’opérateur dans l’expression
>>> from pyromaths.outils import Priorites3 >>> c = ['-9', '-', '6', '*', '2', '*', '5', '-', '4'] >>> Priorites3.recherche_fin_operation(c, "*", ("**", "/"),0) 2 >>> Priorites3.recherche_fin_operation(c, "*", ("**", "/"),4) 6
Type renvoyé: integer
-
pyromaths.outils.Priorites3.
recherche_neg
(calcul)[source]¶ recherche_neg(calcul)
Recherche la première occurence d’un opposé -(-5) ou -Polynome ou d’une écriture du style +(-5) dans une liste de calculs qui ne doit pas être suivie d’un exposant.
Paramètres: calcul (list) – le calcul à traiter Type renvoyé: tuple
-
pyromaths.outils.Priorites3.
recherche_operation
(calcul, op, l_interdit, debut=0)[source]¶ recherche_operation(calcul, op, l_interdit[, debut])
Recherche la première occurrence de l’opération op dans la liste de calculs list. L’opérateur doit être entouré de deux nombres, le premier ne doit pas être précédé d’un opérateur inclus dans la liste l_interdit. L’opérateur à trouver doit être avant la position debut (si debut est non nul).
Paramètres: >>> from pyromaths.outils import Priorites3 >>> c = ['-6', '**', '(-11)', '*', '(-5)'] >>> Priorites3.recherche_operation(c, "*", ("**", "/")) None >>> c = ['-9', '-', '6', '*', '2', '-', '4'] >>> Priorites3.recherche_operation(c, "*", ("**", "/")) 3
Type renvoyé: integer
-
pyromaths.outils.Priorites3.
recherche_parentheses
(calcul)[source]¶ recherche_parentheses(calcul)
Recherche les premières parenthèses (éventuellement intérieures) dans une expression
Paramètres: calcul (list) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.recherche_parentheses(['-6', '*', '(-11)', '*', '(-5)']) None >>> Priorites3.recherche_parentheses(['-9', '-', '6', '*', '(', '(-2)', '-', '4', ')']) (4, 9)
Type renvoyé: tuple
-
pyromaths.outils.Priorites3.
recherche_produit
(calcul)[source]¶ recherche_produit(calcul)
Recherche la première occurrence d’une multiplication ou divisions dans une liste de calculs. Elle doit être précédée d’un nombre qui ne doit pas être précédé d’une puissance ou d’une division, ni suivie d’un exposant.
Paramètres: calcul (list) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> c = ['-9', '-', '6', '*', '2', '*', '5', '-', '4'] >>> Priorites3.recherche_produit(c) (2, 7)
Type renvoyé: tuple
-
pyromaths.outils.Priorites3.
recherche_puissance
(calcul)[source]¶ recherche_puissance(calcul)
Recherche la première occurrence d’une puissance dans une liste de calculs. Elle doit être entourée de deux nombres.
Paramètres: calcul (list) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> c = ['-6', '**', '(-11)', '*', '(-5)'] >>> Priorites3.recherche_puissance(c) (0, 3) >>> p = ['-', 'Polynome([[-4, 2]], "x")', '**', '2', '+', '3'] >>> Priorites3.recherche_puissance(p) (1, 4)
Type renvoyé: tuple
-
pyromaths.outils.Priorites3.
recherche_somme
(calcul)[source]¶ recherche_somme(calcul)
Recherche la première occurrence d’une addition ou soustraction dans une liste de calculs. Elle doit être précédée d’un nombre qui ne doit pas être précédé d’une puissance, d’une multiplication, d’une division ou d’une soustraction, ni suivie d’un exposant, d’une multiplaication ou d’une division.
>>> from pyromaths.outils import Priorites3 >>> Priorites3.recherche_somme(['1', '-', '2', '-', '3']) (0, 5) >>> Priorites3.recherche_somme(['Polynome("x+1")', '-', 'Polynome("x+2")', '-', 'Polynome("x+3")']) (0, 5)
Paramètres: calcul (list) – le calcul à traiter Type renvoyé: tuple
-
pyromaths.outils.Priorites3.
split_calcul
(calcul)[source]¶ split_calcul(calcul)
Partitionne la chaîne de caractères pour obtenir une liste d’opérateurs, de parenthèses, de polynômes et de nombres
Paramètres: calcul (string) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.split_calcul('-Polynome([[-4, 2]], "x")*6**2+3') ['-', 'Polynome([[-4, 2]], "x")', '*', '6', '**', '2', '+', '3'] >>> Priorites3.split_calcul('-6*(-11)*(-5)') ['-', '6', '*', '(-11)', '*', '(-5)'] >>> Priorites3.split_calcul("Polynome('Fraction(1,3)x')+Polynome('x')") ["Polynome('Fraction(1,3)x')", '+', "Polynome('x')"]
TODO : vérifier ce dernier exemple. Je pense que je devrais récupérer -6
Type renvoyé: list
-
pyromaths.outils.Priorites3.
splitting
(calcul)[source]¶ splitting(calcul)
Partitionne la chaîne de caractères pour obtenir une liste d’opérateurs, de parenthèses, de polynômes et de nombres puis arrange la liste des opérandes et opérateurs
Paramètres: calcul (string) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> Priorites3.splitting('-Polynome([[-4, 2]], "x")*6**2+3') ['-', 'Polynome([[-4, 2]], "x")', '*', '6', '**', '2', '+', '3'] >>> Priorites3.splitting('-6*(-11)*(-5)') ['-6', '*', '(-11)', '*', '(-5)'] >>> Priorites3.splitting("Fraction(1,7)x^2-Fraction(3,8)x-1") ['Fraction(1,7)', 'x', '^', '2', '-', 'Fraction(3,8)', 'x', '-', '1'] >>> Priorites3.splitting('-7**2') ['-', '7', '**', '2']
Type renvoyé: list
-
pyromaths.outils.Priorites3.
texify
(liste_calculs)[source]¶ texify(liste_calculs)
Convertit la liste de chaînes de caractères liste_calculs contenant des polynômes en liste de chaînes de caractères au format TeX
TODO : intégrer cela dans
outils.Affichage
et gérer l’ensemble des classes de Pyromaths.Paramètres: calcul (string) – le calcul à traiter >>> from pyromaths.outils import Priorites3 >>> from pyromaths.classes.PolynomesCollege import Polynome >>> l = [['4', '+', '5', '-', '6'], ['9', '-', '6'], ['3']] >>> Priorites3.texify(l) ['4+5-6', '9-6', '3'] >>> Priorites3.texify(Priorites3.priorites('(-7)+8-Polynome([[-4, 1], [-9, 2], [-5, 0]], "x")')) ['1-\\left( -4\\,x-9\\,x^{2}-5\\right) ', '1+4\\,x+9\\,x^{2}+5', '9\\,x^{2}+4\\,x+6'] >>> Priorites3.texify([['Fraction(5,6)', '**', '2']]) ['\\left( \\dfrac{5}{6} \\right) ^{2}']
Type renvoyé: list