Documentation de Pyromaths 21.8.2

4.2.5. Priorites3 — Évaluation d’une expression calculatoire

«  4.2.4. jinja2utils — Utilitaires à utiliser avec les templates jinja2   ::   Contenu   ::   4.3. API par l’exemple  »

4.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:
  • calcul (list) – 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 = ['-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
pyromaths.outils.Priorites3.texifystring(calcul)[source]

texify(calcul)

convertit la chaîne de caractères en chaîne au format TeX.

«  4.2.4. jinja2utils — Utilitaires à utiliser avec les templates jinja2   ::   Contenu   ::   4.3. API par l’exemple  »