programmation impérative en python 3 — cours 7. modules...

289
Programmation impérative en Python Cours 7. Modules, types de donnée, arbres Olivier Baldellon à partir des notes, de Pierre Lezowski, Etienne Lozes et Jean-Paul Roy Courriel : pré[email protected] Page professionnelle : http://deptinfo.unice.fr/~obaldellon/ Université de Nice Sophia Antipolis (Université Côte d’Azur), Département d’Informatique

Upload: others

Post on 03-Jul-2020

21 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Programmation impérative en PythonCours 7. Modules, types de donnée, arbres

Olivier Baldellon à partir des notes, de Pierre Lezowski, Etienne Lozes et Jean-Paul Roy

Courriel : pré[email protected]

Page professionnelle : http://deptinfo.unice.fr/~obaldellon/

Université de Nice Sophia Antipolis (Université Côte d’Azur), Département d’Informatique

Page 2: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Sommaire

f Partie i. Modules

f Partie ii. Types abstraits

f Partie iii. Piles

f Partie iv. Arbres

f Partie v. Algorithmes sur les arbres

f Partie vi. Table des matières

1/41

Page 3: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les modules en Python Partie i. Modules

Ï Un nom de fichier Python se termine par .py et ne contient que deslettres minuscules, des chiffres et des soulignés. Aucun espace !

Ï essai2.py Ï essai_tortue.py Ï((((((((Essai tortue.py

Ï Un module est un fichier python nom_du_module.py contenantÏ des définitions ;Ï des instructions (par exemple d’affichage).

Ï Il y a deux types de modules.

Les scripts

Suite d’instructions destinées à êtredirectement exécutées (avec la touche F5par exemple)

Les bibliothèques (library)

Ensemble de fonctions destinées à êtreutilisées par un autre module.

Ï On peut mélanger les deux mais ce n’est pas une bonne pratique.

2/41

Page 4: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les modules en Python Partie i. Modules

Ï Un nom de fichier Python se termine par .py et ne contient que deslettres minuscules, des chiffres et des soulignés. Aucun espace !

Ï essai2.py Ï essai_tortue.py Ï((((((((Essai tortue.py

Ï Un module est un fichier python nom_du_module.py contenantÏ des définitions ;Ï des instructions (par exemple d’affichage).

Ï Il y a deux types de modules.

Les scripts

Suite d’instructions destinées à êtredirectement exécutées (avec la touche F5par exemple)

Les bibliothèques (library)

Ensemble de fonctions destinées à êtreutilisées par un autre module.

Ï On peut mélanger les deux mais ce n’est pas une bonne pratique.

2/41

Page 5: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les modules en Python Partie i. Modules

Ï Un nom de fichier Python se termine par .py et ne contient que deslettres minuscules, des chiffres et des soulignés. Aucun espace !

Ï essai2.py Ï essai_tortue.py Ï((((((((Essai tortue.py

Ï Un module est un fichier python nom_du_module.py contenantÏ des définitions ;Ï des instructions (par exemple d’affichage).

Ï Il y a deux types de modules.

Les scripts

Suite d’instructions destinées à êtredirectement exécutées (avec la touche F5par exemple)

Les bibliothèques (library)

Ensemble de fonctions destinées à êtreutilisées par un autre module.

Ï On peut mélanger les deux mais ce n’est pas une bonne pratique.

2/41

Page 6: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les modules en Python Partie i. Modules

Ï Un nom de fichier Python se termine par .py et ne contient que deslettres minuscules, des chiffres et des soulignés. Aucun espace !

Ï essai2.py Ï essai_tortue.py Ï((((((((Essai tortue.py

Ï Un module est un fichier python nom_du_module.py contenantÏ des définitions ;Ï des instructions (par exemple d’affichage).

Ï Il y a deux types de modules.

Les scripts

Suite d’instructions destinées à êtredirectement exécutées (avec la touche F5par exemple)

Les bibliothèques (library)

Ensemble de fonctions destinées à êtreutilisées par un autre module.

Ï On peut mélanger les deux mais ce n’est pas une bonne pratique.

2/41

Page 7: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les modules en Python Partie i. Modules

Ï Un nom de fichier Python se termine par .py et ne contient que deslettres minuscules, des chiffres et des soulignés. Aucun espace !

Ï essai2.py Ï essai_tortue.py Ï((((((((Essai tortue.py

Ï Un module est un fichier python nom_du_module.py contenantÏ des définitions ;Ï des instructions (par exemple d’affichage).

Ï Il y a deux types de modules.

Les scripts

Suite d’instructions destinées à êtredirectement exécutées (avec la touche F5par exemple)

Les bibliothèques (library)

Ensemble de fonctions destinées à êtreutilisées par un autre module.

Ï On peut mélanger les deux mais ce n’est pas une bonne pratique.

2/41

Page 8: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)

Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.

>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 9: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.

>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 10: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>>

import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 11: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travail

Module tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 12: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>>

tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 13: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA

20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 14: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>>

tva.prix_ttc(10)12.0

shell

3/41

Page 15: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)

12.0

shell

3/41

Page 16: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On crée un fichier tva.pyÏ avec des définitions de variables et de fonctions (TVA, COEF, prix_ttc)Ï et des instructions (le print)Ï tva est donc à la fois une bibliothèque et un script.Ï en général, le mélange des genres n’est pas une bonne pratique.

TVA = 20 # définition d'une variableCOEF = 1 + TVA / 100 # définition d'une variable

def prix_ttc(p): # définition d'une fonctionglobal COEFreturn p * COEF

print('Module tva.py chargé !') # instruction

tva.py

Ï On peut l’utiliser à partir du top-level.>>> import tva # tva.py dans le répertoire de travailModule tva.py chargé !>>> tva.TVA20>>> tva.prix_ttc(10)12.0

shell

3/41

Page 17: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On prend le même fichier tva.py

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

# print('Module tva.py chargé !')

tva.py

Ï et on l’on l’utilise alors dans un script

import tva # tva.py est dans le même dossier

def bilan(x):prix = tva.prix_ttc(x)print('Avec un taux de', tva.TVA, end='%, ')print('le prix ttc est', prix)

script

>>> bilan(10)Avec un taux de 20%, le prix ttc est 12.0

shell

4/41

Page 18: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On prend le même fichier tva.py

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

# print('Module tva.py chargé !')

tva.py

Ï et on l’on l’utilise alors dans un script

import tva # tva.py est dans le même dossier

def bilan(x):prix = tva.prix_ttc(x)print('Avec un taux de', tva.TVA, end='%, ')print('le prix ttc est', prix)

script

>>>

bilan(10)Avec un taux de 20%, le prix ttc est 12.0

shell

4/41

Page 19: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On prend le même fichier tva.py

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

# print('Module tva.py chargé !')

tva.py

Ï et on l’on l’utilise alors dans un script

import tva # tva.py est dans le même dossier

def bilan(x):prix = tva.prix_ttc(x)print('Avec un taux de', tva.TVA, end='%, ')print('le prix ttc est', prix)

script

>>> bilan(10)

Avec un taux de 20%, le prix ttc est 12.0

shell

4/41

Page 20: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple de module Partie i. Modules

Ï On prend le même fichier tva.py

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

# print('Module tva.py chargé !')

tva.py

Ï et on l’on l’utilise alors dans un script

import tva # tva.py est dans le même dossier

def bilan(x):prix = tva.prix_ttc(x)print('Avec un taux de', tva.TVA, end='%, ')print('le prix ttc est', prix)

script

>>> bilan(10)Avec un taux de 20%, le prix ttc est 12.0

shell

4/41

Page 21: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>>

COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell

>>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 22: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3

>>> tva.prix_ttc(10) #10*COEF?12.0

shell

>>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 23: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>>

tva.prix_ttc(10) #10*COEF?12.0

shell

>>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 24: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?

12.0

shell

>>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 25: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>>

tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 26: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>> tva.COEF = 3

>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 27: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>> tva.COEF = 3>>>

tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 28: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>> tva.COEF = 3>>> tva.prix_ttc(10)

30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 29: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 30: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Portée des variables entre modules Partie i. Modules

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

tva.py

Ï Le module tva définit les variables TVA, COEF et la fonction prix_ttc.

Ï La portée de ces définitions est restreinte au moduleÏ elles ne sont pas visibles directement dans un autre module.Ï sauf à utliser le préfixe tva. : tva.COEF, etc.

>>> COEF=3>>> tva.prix_ttc(10) #10*COEF?12.0

shell >>> tva.COEF = 3>>> tva.prix_ttc(10)30

shell

Ï Les espaces de noms (namespace) permettent d’éviter les conflits de nomsinvolontaires.

Ï On peut utiliser le nom COEF sans conflit avec celui de tva.pyÏ Mais si on veut vraiment modifier tva.COEF, on peut !

5/41

Page 31: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 32: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>>

import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 33: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructions

Module tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 34: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>>

autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 35: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèque

Taux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 36: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.

6/41

Page 37: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction import tva :Ï exécute le fichier tva.pyÏ rend disponibles les définitions de tva.py depuis le fichier autre.py.

TVA = 20COEF = 1 + TVA / 100

def prix_ttc(p):global COEFreturn p * COEF

print('Module tva.py chargé !')

tva.py import tva #exécute tva

def bilan(x):prix = tva.prix_ttc(x)print('Taux :',tva.TVA,end='')print(' ; Prix ttc :', prix)

bilan(10)

autre.py

Ï Il suffit de préfixer les noms du module tva.py par tva. (tva point)Ï prix_ttc(10) devient tva.prix_tcc(10)

>>> import autre # autre est un script : exécute des instructionsModule tva.py chargé !Taux : 20 ; Prix ttc : 12.0>>> autre.bilan(100) # autre est aussi une bibliothèqueTaux : 20 ; Prix ttc : 120.0

shell

Ï Il est préférable d’utiliser un module comme simple bibliothèque.6/41

Page 38: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>>

from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 39: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVA

Module tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 40: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>>

TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 41: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix

20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 42: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>>

tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 43: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tva

Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 44: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>>

COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 45: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVA

Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 46: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 47: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *

Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 48: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *Ï Mais c’est beaucoup plus risqué qu’un simple import tva

Ï S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 49: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.

Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 50: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … Partie i. Modules

Ï Utilisée dans le module autre, l’instruction from tva import TVA :Ï Exécute le fichier tva.pyÏ Introduit le mot TVA dans l’espace de noms du module autreÏ En pratique le mot TVA devient un nom de variable du module autre.

>>> from tva import TVAModule tva.py chargé !>>> TVA # la variable TVA est définie et utilisable sans préfix20>>> tva.TVA # nous n'avons pas importé le module tvaTraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'tva' is not defined>>> COEF # du module tva nous n'avons importé que TVATraceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'COEF' is not defined

shell

Ï Pour introduire tout l’espace de noms d’un module : from tva import *Ï Mais c’est beaucoup plus risqué qu’un simple import tvaÏ S’obliger à utiliser le préfix tva évite les conflits.Ï Cela évite de redéfinir silencieusement un variable déja existante.

7/41

Page 51: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>>

TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 52: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3

>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 53: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>>

from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 54: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA

>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 55: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>>

TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 56: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA

20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 57: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>>

from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 58: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA

>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 59: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>>

TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 60: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA

5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 61: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 62: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>>

TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 63: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3

>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 64: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>>

import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 65: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva

>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 66: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>>

import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 67: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite

>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 68: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>>

( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 69: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )

(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 70: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 71: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>>

TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 72: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3

>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 73: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>>

from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 74: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine

>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 75: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>>

from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 76: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite

>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 77: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>>

(TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 78: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)

(3, 20, 5)

shell

8/41

Page 79: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’instruction from … import … as … Partie i. Modules

Ï Il ne peut y avoir qu’une variable TVA

>>> TVA=3>>> from tva import TVA>>> TVA20>>> from tva_reduite import TVA>>> TVA5

shell

Ï Première solution

>>> TVA=3>>> import tva>>> import tva_reduite>>> ( TVA , tva.TVA , tva_reduite.TVA )(3, 20, 5)

shell

Ï Pour éviter des conflits, on peut importer une valeur sous un autre nom.

>>> TVA=3>>> from tva import TVA as TP # TP = TVA Pleine>>> from tva_reduite import TVA as TR # TR = TVA Réduite>>> (TVA,TP,TR)(3, 20, 5)

shell

8/41

Page 80: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Résumé Partie i. Modules

Ï Pour importer tous les noms du module tva en utilisant le préfixe

>>> import tva>>> tva.COEF1.2

shell

Ï Pour importer une seule variable/fonction de tva dans préfixeÏ pour tout importer sans préfixe (à éviter) from tva import *

>>> from tva import COEF>>> COEF1.2

shell

Ï Pour importer une seule variable/fonction de tva en changeant son nom

>>> from tva import COEF as coefficient>>> coefficient1.2

shell

9/41

Page 81: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Sommaire

f Partie i. Modules

f Partie ii. Types abstraits

f Partie iii. Piles

f Partie iv. Arbres

f Partie v. Algorithmes sur les arbres

f Partie vi. Table des matières

10/41

Page 82: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.

Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 83: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.

Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 84: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »

Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 85: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 86: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.

Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 87: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 88: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

L’abstraction Partie ii. Types abstraits

Ï Qu’est-ce qu’un nombre?Ï Une longueur? comme 3cm.Ï Une quantité d’objet ? trois carottes.Ï Un symbole? le chiffre arabe « 3 »Ï Un ensemble? en théorie des ensembles, on a :

3 ={ {} {{}} {{}{

{}}} }

Ï Peu importe : Les nombres se définissent par leur propriétés.Ï on peut leur appliquer des opérations (+ , −, ×, ÷)Ï on peut les ordonner (≤ ou ≥)Ï ils vérifient certaines propriétés (distributivité, ensemble infini, etc.)

Ï Et ceci, quelque soit la façon dont on les construit mathématiquement.

11/41

Page 89: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 90: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.

Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 91: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)

Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 92: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 93: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 94: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 95: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Quel rapport avec la programmation? Partie ii. Types abstraits

Ï Nous avons rencontré différents types : flottants, booléens, listes, tuples…

Ï Nous voulons travailler maintenant avec des matrices.Ï mais notre langage ne les a pas prévus (il ne peut pas tous prévoir)Ï Il y a plusieurs façons de définir un matrice (liste, tuple, etc.)

Ï Nous allons travailler en deux temps :

• Nous allons créer dans un module un nouveau type abstrait matriceÏ on choisit une façon de définir les matricesÏ on écrit une collection de fonction (création, opérations, affichage)

• Nous allons ensuite utiliser le type abstraitÏ Nous oublions comment sont codées les matricesÏ Nous travaillons uniquement avec les fonctions du module

12/41

Page 96: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)

Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)

Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 97: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matrice

Ï Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)

Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 98: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)

Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 99: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>>

A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 100: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)

>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 101: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>>

accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 102: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)

3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 103: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>>

A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 104: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A

(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 105: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script

>>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 106: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>>

A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 107: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)

>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 108: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)>>>

accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 109: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)

3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 110: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>>

A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 111: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A

[[1, 2], [3, 4]]

shell

13/41

Page 112: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : matrice 2 × 2 Partie ii. Types abstraits

Ï Matrice 2×2 : 4 nombres (2 lignes, 2 colonnes)Ï Il faut savoir construire une matriceÏ Il faut savoir accéder à ses éléments

(m0,0 m0,1

m1,0 m1,1

)(

1 2

3 4

)Ï Les matrices définies comme des tuples

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A(1, 2, 3, 4)

shell

Ï Les matrices comme listes de listes

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

script >>> A=matrice(1,2,3,4)>>> accès(A,1,0)3>>> A #comment est construit A[[1, 2], [3, 4]]

shell

13/41

Page 113: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :

Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 114: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.

Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 115: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))

Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 116: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 117: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 118: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.

14/41

Page 119: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script

def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.14/41

Page 120: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Abstraction et modules Partie ii. Types abstraits

Ï Conclusion :Ï il n’y a pas une unique représentation concrète d’une matrice abstraite.Ï ce qui fait une matrice est ses fonctions (matrice(…) et accès(…))Ï Si je veux définir de nouvelles fonctions ; je n’utilise que ces deux là.

import matrice

def trace(M):a=matrice.accès(M, 0, 0)d=matrice.accès(M, 1, 1)return a+d

def determinant(M):a=matrice.accès(M, 0, 0)b=matrice.accès(M, 0, 1)c=matrice.accès(M, 1, 0)d=matrice.accès(M, 1, 1)return a*d - b*c

script def matrice(a,b,c,d):return [[a,b],[c,d]]

def accès(M, li, co): # m i,jreturn M[li][co]

matrice.py

2 fichiers possibles.

def matrice(a,b,c,d):return (a, b, c, d)

def accès(M, li, co): # m i,jreturn M[2 * li + co]

matrice.py

Ï En dehors du module, on ignore la représentation concrète des matrices

Ï on en fait abstraction.14/41

Page 121: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :

Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 122: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le module

Ï L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 123: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.

Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 124: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 125: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 126: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 127: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Usages et avantages des types abstrait Partie ii. Types abstraits

Ï Il y a deux acteurs dans notre histoire :Ï Le développeur qui écrit le moduleÏ L’utilisateur qui fait appel aux fonctions du module.Ï Entre les deux il y a le type abstrait (ici matrice 2×2)

Ï L’interface définie un type abstraitÏ Elle doit être documentée.Ï C’est le nom des fonctions et ce qu’elles font (sémantiques)Ï Elle ne doit jamais changer !

Ï Le développeur fait le choix de la structure.Ï Il écrit les fonctions de l’interfaceÏ Il peut modifier la structure (pour gagner en efficacité par exemple)Ï Il ne doit pas toucher à l’interface.

Ï L’utilisateur écrit des algorithmes/programmes en utilisant l’interfaceÏ Une documentation suffit, avec la complexité des fonctions.Ï Il n’as pas à se soucier des changements fait par le développeurÏ Il ne doit pas utiliser la structure interne.

15/41

Page 128: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : définition Partie ii. Types abstraits

Ï Python n’offre pas les nombres rationnels exacts (fractions).Ï Créons un type abstrait correspondant !

Ï Mathématiquement on représente un rationnel par une fraction p

qÏ avec q > 0Ï et pgcd(p,q) = 1 (la fraction est irreductible)

Ï Informatiquement, on choisit de les représenter par un couple d’entierÏ le numérateur p et le dénominateur q,Ï les mêmes conditions mathématiques doivent être vérifiées..

Ï Que mettre dans notre module?Ï Les fonctions qui ont besoin d’utiliser la structure interneÏ Ces fonctions formeront l’interfacesÏ Les autres fonctions n’utiliseront que l’interface indépendamment de la

structure interne

16/41

Page 129: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : définition Partie ii. Types abstraits

Ï Python n’offre pas les nombres rationnels exacts (fractions).Ï Créons un type abstrait correspondant !

Ï Mathématiquement on représente un rationnel par une fraction p

qÏ avec q > 0Ï et pgcd(p,q) = 1 (la fraction est irreductible)

Ï Informatiquement, on choisit de les représenter par un couple d’entierÏ le numérateur p et le dénominateur q,Ï les mêmes conditions mathématiques doivent être vérifiées..

Ï Que mettre dans notre module?Ï Les fonctions qui ont besoin d’utiliser la structure interneÏ Ces fonctions formeront l’interfacesÏ Les autres fonctions n’utiliseront que l’interface indépendamment de la

structure interne

16/41

Page 130: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : définition Partie ii. Types abstraits

Ï Python n’offre pas les nombres rationnels exacts (fractions).Ï Créons un type abstrait correspondant !

Ï Mathématiquement on représente un rationnel par une fraction p

qÏ avec q > 0Ï et pgcd(p,q) = 1 (la fraction est irreductible)

Ï Informatiquement, on choisit de les représenter par un couple d’entierÏ le numérateur p et le dénominateur q,Ï les mêmes conditions mathématiques doivent être vérifiées..

Ï Que mettre dans notre module?Ï Les fonctions qui ont besoin d’utiliser la structure interneÏ Ces fonctions formeront l’interfacesÏ Les autres fonctions n’utiliseront que l’interface indépendamment de la

structure interne

16/41

Page 131: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : définition Partie ii. Types abstraits

Ï Python n’offre pas les nombres rationnels exacts (fractions).Ï Créons un type abstrait correspondant !

Ï Mathématiquement on représente un rationnel par une fraction p

qÏ avec q > 0Ï et pgcd(p,q) = 1 (la fraction est irreductible)

Ï Informatiquement, on choisit de les représenter par un couple d’entierÏ le numérateur p et le dénominateur q,Ï les mêmes conditions mathématiques doivent être vérifiées..

Ï Que mettre dans notre module?Ï Les fonctions qui ont besoin d’utiliser la structure interneÏ Ces fonctions formeront l’interfacesÏ Les autres fonctions n’utiliseront que l’interface indépendamment de la

structure interne

16/41

Page 132: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : implémentation Partie ii. Types abstraits

import math

# pour créer le rationnel p/q avec p et q entiersdef rationnel(p, q):

if q == 0:raise ValueError('dénominateur nul !')

if q < 0:(p, q) = (-p, -q)

g = math.gcd(p, q) # ici, q est forcément > 0return (p//g, q//g) # on simplifie la fraction

def numérateur(r):return r[0]

def dénominateur(r):return r[1]

def repr(r): # la représentation externe de rif r[0] == 0: return '0'if r[1] == 1: return str(r[0])return '{}/{}'.format(r[0], r[1])

rationnel.py

17/41

Page 133: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction

>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 134: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>>

from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 135: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *

>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 136: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>>

r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 137: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)

>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 138: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>>

r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 139: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)

>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 140: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>>

r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 141: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)

>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 142: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>>

print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 143: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))

-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 144: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 145: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les nombres rationnels : usage Partie ii. Types abstraits

Ï Définissons maintenant l’addition sur les rationnels.import rationnel

def ajout_rationnel(a,b):pa = rationnel.numérateur(a)qa = rationnel.dénomitateur(a)pb = rationnel.numérateur(b)qb = rationnel.dénomirateur(b)return rationnel.rationnel(pa*qb + qa*pb,qa*qb)

script

Ï On teste notre fonction>>> from rationnel import *>>> r1 = rationnel(6, -4)>>> r2 = rationnel(1, 3)>>> r3 = ajout_rationnel(r1, r2)>>> print('{} + {} = {}'.format(repr(r1),repr(r2),repr(r3)))-3/2 + 1/3 = -7/6

shell

Ï Nul besoin de se soucier de la simplication des fractions !

18/41

Page 146: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>>

print(r1)(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 147: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)

(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 148: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>>

print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 149: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>> print(repr(r1))

-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 150: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 151: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 152: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 153: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Remarque sur les types abstraits Partie ii. Types abstraits

Ï Malheureusement on a toujours accès à la structure interne.

>>> print(r1)(-3, 2)>>> print(repr(r1))-3/2

shell

Ï Python permet de faire des choses plus propresÏ écrire r1 + r2 directement (au lieu d’une fonction ajout)Ï rendre invisible la structure interne de r1Ï faire en sorte que print(r1) utilise la fonction repr(r1)Ï définir un nouveau type rationnel

Ï Mais Pyton utilise pour cela le formalisme de la programmation objetÏ Cela sort du cadre de ce coursÏ Interdiction de l’utiliser dans le cadre de cette UE!

Ï Les principes vus restent néanmoins validesÏ La programmation objet n’est qu’une généralisation de ces principesÏ Les autres langages (objet ou non) ont des mécanismes similaires

19/41

Page 154: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Sommaire

f Partie i. Modules

f Partie ii. Types abstraits

f Partie iii. Piles

f Partie iv. Arbres

f Partie v. Algorithmes sur les arbres

f Partie vi. Table des matières

20/41

Page 155: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :

Ï Au début la pile est videÏ On empile 1Ï On empile 7Ï On empile 5Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 156: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :Ï Au début la pile est vide

Ï On empile 1Ï On empile 7Ï On empile 5Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 157: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1

17

175

17

Ï Fonctionnement :Ï Au début la pile est videÏ On empile 1

Ï On empile 7Ï On empile 5Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 158: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :Ï Au début la pile est videÏ On empile 1Ï On empile 7

Ï On empile 5Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 159: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :Ï Au début la pile est videÏ On empile 1Ï On empile 7Ï On empile 5

Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 160: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :Ï Au début la pile est videÏ On empile 1Ï On empile 7Ï On empile 5Ï On dépile 5

Ï À la fin le sommet vaut 7

21/41

Page 161: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Le type abstrait Pile Partie iii. Piles

Ï La pile est un type de structure, comme le tuple ou la liste, très utilisé eninformatique.

1 17

175

17

Ï Fonctionnement :Ï Au début la pile est videÏ On empile 1Ï On empile 7Ï On empile 5Ï On dépile 5Ï À la fin le sommet vaut 7

21/41

Page 162: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>>

import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 163: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile

>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 164: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>>

P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 165: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()

>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 166: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>>

pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 167: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)

>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 168: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>>

pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 169: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)

3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 170: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>>

pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 171: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)

3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 172: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>>

pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 173: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)

Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 174: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Implémentation du type abstrait Partie iii. Piles

Ï On utilise une liste comme structure interne

PileErreur=ValueError('Pile vide')

def nouvelle_pile():return []

def empile(L,e):L.append(e)

def dépile(L):if L == []: raise PileErreurL.pop()

def sommet(L):if L == []: raise PileErreurreturn L[len(L)-1]

def est_vide():return L==[]

pile.py

>>> import pile>>> P = pile.nouvelle_pile()>>> pile.empile(P,3)>>> pile.sommet(P)3>>> pile.dépile(P)3>>> pile.sommet(P)Traceback (most recent calllast):

File "<stdin>", line 1, in<module>

File "./pile.py", line 13, insommet

if L == []: raise PileErreurValueError: Pile vide

shell

22/41

Page 175: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 176: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 177: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 !

2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 178: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 179: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 180: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 181: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 182: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 183: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

À quoi servent les piles? Partie iii. Piles

Ï Les piles sont souvent utiles pour stocker des calculs intermédiaires.

Ï Typiquement pour le calcul de la factiorielle.Ï Il faut calculer fact(n-1) avant de faire le * nÏ On met les calculs « * n » dans la pile.Ï et dès qu’on tombe sur 0! on dépile et applique les calculs

def fac(n):if n == 0:

return 1else:

return fac(n - 1) * n

script

3 ! 2 !

* 3

1 !

* 3* 2

0 ! = 1

* 3* 2* 1

1

* 3* 2

2

* 3

6

Ï Le véritable mécanisme fonctionne aussi avec des piles : cours 5 partie v

23/41

Page 184: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :Ï si la souris est pressée et déplacée, on empile un nouveau trait ;Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 185: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :

Ï si la souris est pressée et déplacée, on empile un nouveau trait ;Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 186: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :Ï si la souris est pressée et déplacée, on empile un nouveau trait ;

Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 187: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :Ï si la souris est pressée et déplacée, on empile un nouveau trait ;Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 188: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :Ï si la souris est pressée et déplacée, on empile un nouveau trait ;Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 189: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (principe) Partie iii. Piles

Ï Reprenons le dessin à main levée à la sourisÏ on veut ajouter une fonction « annuler »

Ï Utilisons une pile qui contiendra tous les traits qui ont été tracés :Ï si la souris est pressée et déplacée, on empile un nouveau trait ;Ï si une touche est pressée, on annule le dernier trait : on le dépile.

Ï Pour connaître un trait, il suffit de connaître ses extrémités.Ï On va donc représenter un trait par un couple de points.

Ï Le monde est un triplet (P, px, py)Ï P est la pile des traits tracésÏ (px, py) sont les coordonnées de la souris à sa dernière position

enregistrée.

24/41

Page 190: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Exemple : annulation de dessin (code) Partie iii. Piles

def suivant(m):# on met à jour la position# de la souris(P, px, py) = mreturn (P, mouseX, mouseY)

def dessiner_pile(P):for ((x1,y1),(x2,y2)) in P:

line(x1, y1, x2, y2)

def dessiner(m):(P, px, py) = mif mousePressed:

# si la souris a été pressée# on ajoute un trait à la piletrait=((px,py), (mouseX, mouseY))empiler(P, trait)

# on efface tout et on redessine tous# les traits présents dans la pile Pbackground(255, 255, 255)dessiner_pile(P)

script def setup():global msize(LARG, HAUT)stroke(0)frameRate(28)# le monde initialm = (pile_vide(), 0, 0)

def keyPressed():global m# si une touche est# pressée, on annule# le dernier trait :# on le dépile(P, py, py) = mdepiler(m)

def draw():global mdessiner(m)m = suivant(m)

script

25/41

Page 191: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Sommaire

f Partie i. Modules

f Partie ii. Types abstraits

f Partie iii. Piles

f Partie iv. Arbres

f Partie v. Algorithmes sur les arbres

f Partie vi. Table des matières

26/41

Page 192: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Qu’est-ce qu’un arbre? Partie iv. Arbres

Ï Un arbre (graphe acyclique) est un objet fondemental en informatique.Ï Un arbre a une racine (en rouge)Ï Un arbre a des nœuds (avec des enfants) ; la racine est un nœudÏ Un arbre a des feuilles (sans enfant) (en vert)

Arbre binaire d’expression

×

2 x

÷

+

3 y

5

1 racine, 4 nœuds, 5 feuilles

Un arbre grammatical

phrase

gr. nominal

art.

le

nom

chat

gr. verbal

verbe

mange

gr. nominal

art.

la

adj.

petite

nom

souris

1 racine, 10 nœuds, 6 feuilles

27/41

Page 193: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Qu’est-ce qu’un arbre? Partie iv. Arbres

Ï Un arbre (graphe acyclique) est un objet fondemental en informatique.Ï Un arbre a une racine (en rouge)Ï Un arbre a des nœuds (avec des enfants) ; la racine est un nœudÏ Un arbre a des feuilles (sans enfant) (en vert)

Arbre binaire d’expression

×

2 x

÷

+

3 y

5

1 racine, 4 nœuds, 5 feuilles

Un arbre grammatical

phrase

gr. nominal

art.

le

nom

chat

gr. verbal

verbe

mange

gr. nominal

art.

la

adj.

petite

nom

souris

1 racine, 10 nœuds, 6 feuilles

27/41

Page 194: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Qu’est-ce qu’un arbre? Partie iv. Arbres

Ï Un arbre (graphe acyclique) est un objet fondemental en informatique.Ï Un arbre a une racine (en rouge)Ï Un arbre a des nœuds (avec des enfants) ; la racine est un nœudÏ Un arbre a des feuilles (sans enfant) (en vert)

Arbre binaire d’expression

×

2 x

÷

+

3 y

5

1 racine, 4 nœuds, 5 feuilles

Un arbre grammatical

phrase

gr. nominal

art.

le

nom

chat

gr. verbal

verbe

mange

gr. nominal

art.

la

adj.

petite

nom

souris

1 racine, 10 nœuds, 6 feuilles27/41

Page 195: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :

Ï Les arbres simples correspondant à des feuillesÏ Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 196: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :Ï Les arbres simples correspondant à des feuilles

Ï Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 197: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :Ï Les arbres simples correspondant à des feuillesÏ Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 198: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :Ï Les arbres simples correspondant à des feuillesÏ Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 199: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :Ï Les arbres simples correspondant à des feuillesÏ Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 200: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : principe Partie iv. Arbres

Ï Il y a deux types d’arbres :Ï Les arbres simples correspondant à des feuillesÏ Les arbres composés se décomposant en une racine et deux sous-arbres

Ï On choisit une opération r, un arbre composé A1, un arbre simple A2 :

r = / A1 =+

3 yA2 = 5

Ï On peut construire un nouvel arbre composé :

/

+

3 y

5

Ï Chaque arbre correspond à une expression : ici l’expression est (3+y)/5

28/41

Page 201: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : définitions Partie iv. Arbres

Ï On définit un arbre binaire d’expression (ABE) par récurrence :

Ï Cas de base : une feuille contenant un nombre ou une lettre est un ABE.Ï L’expression correspondante est le contenu de la feuille.

Ï Cas composé : L’arbre suivant est une ABE si et seulement si :Ï A1 et A2 sont des ABEÏ o une operation (+, -, *, /)Ï L’expression associée s’obtient en appliquant o

aux expressions associées à A1 et A2.

o

A1 A2

Ï Exemple : l’arbre suivant correspond au calcul (2*x)-((3+y)/5)-

*

2 x

/

+

3 y

5

29/41

Page 202: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : définitions Partie iv. Arbres

Ï On définit un arbre binaire d’expression (ABE) par récurrence :

Ï Cas de base : une feuille contenant un nombre ou une lettre est un ABE.

Ï L’expression correspondante est le contenu de la feuille.

Ï Cas composé : L’arbre suivant est une ABE si et seulement si :Ï A1 et A2 sont des ABEÏ o une operation (+, -, *, /)Ï L’expression associée s’obtient en appliquant o

aux expressions associées à A1 et A2.

o

A1 A2

Ï Exemple : l’arbre suivant correspond au calcul (2*x)-((3+y)/5)-

*

2 x

/

+

3 y

5

29/41

Page 203: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : définitions Partie iv. Arbres

Ï On définit un arbre binaire d’expression (ABE) par récurrence :

Ï Cas de base : une feuille contenant un nombre ou une lettre est un ABE.Ï L’expression correspondante est le contenu de la feuille.

Ï Cas composé : L’arbre suivant est une ABE si et seulement si :Ï A1 et A2 sont des ABEÏ o une operation (+, -, *, /)Ï L’expression associée s’obtient en appliquant o

aux expressions associées à A1 et A2.

o

A1 A2

Ï Exemple : l’arbre suivant correspond au calcul (2*x)-((3+y)/5)-

*

2 x

/

+

3 y

5

29/41

Page 204: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : définitions Partie iv. Arbres

Ï On définit un arbre binaire d’expression (ABE) par récurrence :

Ï Cas de base : une feuille contenant un nombre ou une lettre est un ABE.Ï L’expression correspondante est le contenu de la feuille.

Ï Cas composé : L’arbre suivant est une ABE si et seulement si :Ï A1 et A2 sont des ABEÏ o une operation (+, -, *, /)Ï L’expression associée s’obtient en appliquant o

aux expressions associées à A1 et A2.

o

A1 A2

Ï Exemple : l’arbre suivant correspond au calcul (2*x)-((3+y)/5)-

*

2 x

/

+

3 y

5

29/41

Page 205: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Les arbres binaires d’expressions : définitions Partie iv. Arbres

Ï On définit un arbre binaire d’expression (ABE) par récurrence :

Ï Cas de base : une feuille contenant un nombre ou une lettre est un ABE.Ï L’expression correspondante est le contenu de la feuille.

Ï Cas composé : L’arbre suivant est une ABE si et seulement si :Ï A1 et A2 sont des ABEÏ o une operation (+, -, *, /)Ï L’expression associée s’obtient en appliquant o

aux expressions associées à A1 et A2.

o

A1 A2

Ï Exemple : l’arbre suivant correspond au calcul (2*x)-((3+y)/5)-

*

2 x

/

+

3 y

5

29/41

Page 206: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : arbres binaires d’expressions Partie iv. Arbres

Ï Un arbre est soit un tuple (r,Ag,Ad) soit une feuille (int ou str)

def arbre(r, Ag, Ad):return (r, Ag, Ad)

def est_feuille(obj):return type(obj) == int or type(obj) == str

def est_operateur(obj):return obj in ['+', '*', '-', '/']

def racine(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de racine")return A[0]

def fg(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de fils")return A[1]

def fd(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de fils")return A[2]

abe.py

30/41

Page 207: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Type abstrait : arbres binaires d’expressions Partie iv. Arbres

Ï Un arbre est soit un tuple (r,Ag,Ad) soit une feuille (int ou str)

def arbre(r, Ag, Ad):return (r, Ag, Ad)

def est_feuille(obj):return type(obj) == int or type(obj) == str

def est_operateur(obj):return obj in ['+', '*', '-', '/']

def racine(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de racine")return A[0]

def fg(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de fils")return A[1]

def fd(A): # A doit être un nœudif est_feuille(A):

raise ValueError("une feuille n'a pas de fils")return A[2]

abe.py

30/41

Page 208: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :

Ï soit construire directement le tuple : c’est très mal !A = ('/', ('+', 3, 'y'), 5)

Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 209: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)

Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)A = arbre( '/', arbre('+', 3, 'y'), 5)

>>>

from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 210: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *

>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 211: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>>

A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 212: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)

>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 213: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>>

A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 214: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A

('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 215: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>>

fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 216: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)

('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 217: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>>

fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 218: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))

'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 219: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>>

racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 220: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))

'+'

shell

/

+

3 y

5

31/41

Page 221: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Construction d’un arbre Partie iv. Arbres

Ï Pour construire un arbre, on peut :Ï soit construire directement le tuple : c’est très mal !

A = ('/', ('+', 3, 'y'), 5)Ï soit passer par le constructeur du type abstrait (c’est la méthode propre)

A = arbre( '/', arbre('+', 3, 'y'), 5)

>>> from abe import *>>> A = arbre('/', arbre('+', 3,'y'), 5)>>> A('/', ('+', 3, 'y'), 5)>>> fg(A)('+', 3, 'y')>>> fd(fg(A))'y'>>> racine(fg(A))'+'

shell

/

+

3 y

5

31/41

Page 222: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>>

A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 223: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A

('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 224: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>>

( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 225: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))

(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 226: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 227: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 228: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.

32/41

Page 229: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Hauteur d’un arbre Partie iv. Arbres

Ï C’est la plus grande longueur reliant la racine à une feuilledef hauteur(A):

if est_feuille(A):return 0

else:hgauche = hauteur(fg(A))hdroite = hauteur(fd(A))return 1+max(hgauche, hdroite)

script -

*

2 x

/

+

3 y

5

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> ( hauteur(A) , hauteur(fg(A)) , hauteur(fd(A)))(3, 1, 2)

shell

Ï Notez la récurrence double (hauteur est appelée deux fois)

Ï Un arbre de hauteur h contient au plus 2h feuilles (exercice : pourquoi ?).

Ï Réciproquement, un arbre de n feuilles, on s’attend à ce qu’il ait unehauteur h telle que n ≈ 2h , d’où h ≈ log2(n).

Ï Dans le cas ou n = 2h on parle d’arbre binaire complet.32/41

Page 230: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.Ï On cherche d’abord dans le sous-arbre de gaucheÏ Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 231: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.

Ï On cherche d’abord dans le sous-arbre de gaucheÏ Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 232: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.Ï On cherche d’abord dans le sous-arbre de gauche

Ï Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 233: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.Ï On cherche d’abord dans le sous-arbre de gaucheÏ Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 234: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.Ï On cherche d’abord dans le sous-arbre de gaucheÏ Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.

Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 235: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Présence d’une feuille Partie iv. Arbres

Ï On cherche à savoir si une feuille est présente dans un arbre.

def présente(f, A):if est_feuille(A):

return f == Aelse:

return présente(f, fg(A)) or présente(f, fd(A))

script

Ï Rappel : le or est paresseux.Ï On cherche d’abord dans le sous-arbre de gaucheÏ Et seulement si on n’a pas trouvé, on cherche alors à droite

Ï Le parcours en profondeur consiste à :Ï explorer entièrement le sous-arbre de gauche avant celui de droite.Ï répéter cet ordre d’exploration dans l’exploration des sous-arbres.

33/41

Page 236: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>>

feuillage(A)[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 237: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)

[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 238: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)[2, 'x', 3, 'y', 5]>>>

feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 239: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))

[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 240: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 241: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 242: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Algorithmes simples : Feuillage d’un arbre Partie iv. Arbres

Ï Calculer le feuillage d’un arbre revient à produire la liste plate de sesfeuilles par un parcours en profondeur préfixe :

def feuillage(A):if est_feuille(A):

return [A]else:

return feuillage(fg(A)) + feuillage(fd(A))

script

>>> feuillage(A)[2, 'x', 3, 'y', 5]>>> feuillage(fd(A))[3, 'y', 5]

shell-

*

2 x

/

+

3 y

5

Ï Exercice : Que vaut feuillage(fd(fg(A))?

Ï Exercice : Donner le programme qui renvoie le nombre de feuille.

34/41

Page 243: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Sommaire

f Partie i. Modules

f Partie ii. Types abstraits

f Partie iii. Piles

f Partie iv. Arbres

f Partie v. Algorithmes sur les arbres

f Partie vi. Table des matières

35/41

Page 244: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :

Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 245: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;

Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 246: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 247: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 248: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>>

valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 249: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))

10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 250: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>>

valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 251: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)

12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 252: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Valeur d’un arbre arithmétique Partie v. Algorithmes sur les arbres

Ï Un arbre binaire d’expression est dit :Ï arithmétique si toutes ses feuilles sont des constantes ;Ï algébrique si au moins une feuille est une variable.

def valeur(A): # l'arbre A doit être arithmétiqueif est_feuille(A):

return Aelse:

r = racine(A)vg = valeur(fg(A))vd = valeur(fd(A))if r == '+' : return vg + vdif r == '-' : return vg - vdif r == '*' : return vg * vdif r == '/' : return vg / vd

script

>>> valeur(fg(A))10>>> valeur(A)12.0

shell-

*

2 +

1 4

/

+

3 7

-5

36/41

Page 253: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.

Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 254: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbre

Ï On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 255: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gauche

Ï On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 256: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>>

A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 257: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A

('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 258: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>>

pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 259: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')

- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 260: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 261: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbre

Ï Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 262: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symboles

Ï Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 263: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Parcours en profondeur préfixe Partie v. Algorithmes sur les arbres

Ï On souhaite afficher tous les symboles sur l’arbre (nœud et feuille)Ï pour cela on va faire un parcours en profondeur préfixe.Ï D’abords on afficher la racine de l’arbreÏ On affiche récursivement les symboles du sous-arbre gaucheÏ On affiche récursivement les symboles du sous-arbre droit

def pp_prefixe(A):if est_feuille(A):

print(A)else:

print(racine(A))pp_prefixe(fg(A))pp_prefixe(fd(A))

script

>>> A('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))>>> pp_prefixe(A) ; print(' ')- * 2 x / + 3 y 5

shell

-

*

2 x

/

+

3 y

5

Ï On remarque que l’ordre est le même que dans l’écriture de l’arbreÏ Exercice (facile) : faire une fonction qui renvoie la liste des symbolesÏ Exercice inverse (TD 7) : créer l’arbre à partir de la liste des symboles

37/41

Page 264: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : principe Partie v. Algorithmes sur les arbres

Ï Les arbres formant un type récursif,Ï il est naturel de programmer récursivement pour les manipuler.

Ï Mais on peut aussi produire un algorithme itératif (avec une boucle).

Ï On utilise une pile pour stocker les branches qu’ils nous reste à visiter.Ï Quand on tombre sur un sous-arbre à visiter, à l’ajoute à la pile.Ï On traite les sous-arbres du haut de la pile en premier

Ï Exemple : calcul du nombre de feuilles de A en itératif.

• Initialisation : je mets l’arbre dans une pile vide

• À chaque tour de boucle je mets le sommet de la pile dans la variable A

• si A est un arbre composé : il me reste à visiter les deux filsÏ j’empile le fils droit de AÏ j’empile le fils gauche de A

• si A est un arbre simple (une feuille)Ï J’ajoute 1 au compteur de feuille

38/41

Page 265: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : principe Partie v. Algorithmes sur les arbres

Ï Les arbres formant un type récursif,Ï il est naturel de programmer récursivement pour les manipuler.

Ï Mais on peut aussi produire un algorithme itératif (avec une boucle).

Ï On utilise une pile pour stocker les branches qu’ils nous reste à visiter.Ï Quand on tombre sur un sous-arbre à visiter, à l’ajoute à la pile.Ï On traite les sous-arbres du haut de la pile en premier

Ï Exemple : calcul du nombre de feuilles de A en itératif.

• Initialisation : je mets l’arbre dans une pile vide

• À chaque tour de boucle je mets le sommet de la pile dans la variable A

• si A est un arbre composé : il me reste à visiter les deux filsÏ j’empile le fils droit de AÏ j’empile le fils gauche de A

• si A est un arbre simple (une feuille)Ï J’ajoute 1 au compteur de feuille

38/41

Page 266: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : principe Partie v. Algorithmes sur les arbres

Ï Les arbres formant un type récursif,Ï il est naturel de programmer récursivement pour les manipuler.

Ï Mais on peut aussi produire un algorithme itératif (avec une boucle).

Ï On utilise une pile pour stocker les branches qu’ils nous reste à visiter.Ï Quand on tombre sur un sous-arbre à visiter, à l’ajoute à la pile.Ï On traite les sous-arbres du haut de la pile en premier

Ï Exemple : calcul du nombre de feuilles de A en itératif.

• Initialisation : je mets l’arbre dans une pile vide

• À chaque tour de boucle je mets le sommet de la pile dans la variable A

• si A est un arbre composé : il me reste à visiter les deux filsÏ j’empile le fils droit de AÏ j’empile le fils gauche de A

• si A est un arbre simple (une feuille)Ï J’ajoute 1 au compteur de feuille

38/41

Page 267: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : code Partie v. Algorithmes sur les arbres

def nb_feuilles(A): # le nombre de feuillesP = nouvelle_pile() ; empile(P, A)res = 0# tant qu'il reste des sous-arbres à visiterwhile not est_vide(P):

print(P)A = dépile(P)if est_feuille(A):

res = res + 1else:

empile(P, fd(A)); empile(P, fg(A))return res

script

>>>

nb_feuilles(A)[('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))][('/', ('+', 3, 'y'), 5), ('*', 2, 'x')][('/', ('+', 3, 'y'), 5), 'x', 2][('/', ('+', 3, 'y'), 5), 'x'][('/', ('+', 3, 'y'), 5)][5, ('+', 3, 'y')][5, 'y', 3][5, 'y'][5]5

shell

-

*

2 x

/

+

3 y

5

39/41

Page 268: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : code Partie v. Algorithmes sur les arbres

def nb_feuilles(A): # le nombre de feuillesP = nouvelle_pile() ; empile(P, A)res = 0# tant qu'il reste des sous-arbres à visiterwhile not est_vide(P):

print(P)A = dépile(P)if est_feuille(A):

res = res + 1else:

empile(P, fd(A)); empile(P, fg(A))return res

script

>>> nb_feuilles(A)

[('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))][('/', ('+', 3, 'y'), 5), ('*', 2, 'x')][('/', ('+', 3, 'y'), 5), 'x', 2][('/', ('+', 3, 'y'), 5), 'x'][('/', ('+', 3, 'y'), 5)][5, ('+', 3, 'y')][5, 'y', 3][5, 'y'][5]5

shell

-

*

2 x

/

+

3 y

5

39/41

Page 269: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : code Partie v. Algorithmes sur les arbres

def nb_feuilles(A): # le nombre de feuillesP = nouvelle_pile() ; empile(P, A)res = 0# tant qu'il reste des sous-arbres à visiterwhile not est_vide(P):

print(P)A = dépile(P)if est_feuille(A):

res = res + 1else:

empile(P, fd(A)); empile(P, fg(A))return res

script

>>> nb_feuilles(A)[('-', ('*', 2, 'x'), ('/', ('+', 3, 'y'), 5))][('/', ('+', 3, 'y'), 5), ('*', 2, 'x')][('/', ('+', 3, 'y'), 5), 'x', 2][('/', ('+', 3, 'y'), 5), 'x'][('/', ('+', 3, 'y'), 5)][5, ('+', 3, 'y')][5, 'y', 3][5, 'y'][5]5

shell

-

*

2 x

/

+

3 y

5

39/41

Page 270: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=0

('-',('*',2,'x'),('/',('+',3,'y'),5))

40/41

Page 271: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=('-',('*',2,'x') ,('/',('+',3,'y'),5)) res=0

40/41

Page 272: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=0

('/',('+',3,'y'),5)('*',2,'x')

40/41

Page 273: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=0

('/',('+',3,'y'),5)('*',2,'x')

40/41

Page 274: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=('*',2 ,'x') res=0

('/',('+',3,'y'),5)

40/41

Page 275: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=0

2'x'

('/',('+',3,'y'),5)

40/41

Page 276: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=0

2'x'

('/',('+',3,'y'),5)

40/41

Page 277: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=2 res=1

'x'('/',('+',3,'y'),5)

40/41

Page 278: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A='x' res=2

('/',('+',3,'y'),5)

40/41

Page 279: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=('/',('+',3,'y') ,5) res=2

40/41

Page 280: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=2

('+',3,'y')5

40/41

Page 281: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=2

('+',3,'y')5

40/41

Page 282: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=('+',3 ,'y') res=2

5

40/41

Page 283: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=2

3'y'5

40/41

Page 284: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A= res=2

3'y'5

40/41

Page 285: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=3 res=3

'y'5

40/41

Page 286: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A='y' res=4

5

40/41

Page 287: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Pile et parcours itératif : exécution Partie v. Algorithmes sur les arbres

Ï Pour bien comprendre détaillons l’exemple précedent.

Ï Prenez le temps de bien le comprendre-

*

2 x

/

+

3 y

5

A=5 res=5

40/41

Page 288: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Merci pour votre attentionQuestions

?41/41

Page 289: Programmation impérative en Python 3 — Cours 7. Modules ...deptinfo.unice.fr/~obaldellon/pdf/baldellon-python-07.pdf · Sommaire f Partiei.Modules f Partieii.Typesabstraits f Partieiii.Piles

Cours 7 — Modules, types de donnée, arbres

f Partie i. Modules

Les modules en Python

Exemple de module

Exemple de module

Portée des variables entre modules

L’instruction import …

L’instruction from … import …

L’instruction from … import … as …

Résumé

f Partie ii. Types abstraits

L’abstraction

Quel rapport avec la programmation?

Type abstrait : matrice 2 × 2

Abstraction et modules

Usages et avantages des types abstrait

Les nombres rationnels : définition

Les nombres rationnels : implémentation

Les nombres rationnels : usage

Remarque sur les types abstraits

f Partie iii. Piles

Le type abstrait Pile

Implémentation du type abstrait

À quoi servent les piles ?

Exemple : annulation de dessin (principe)

Exemple : annulation de dessin (code)

f Partie iv. Arbres

Qu’est-ce qu’un arbre ?

Les arbres binaires d’expressions : principe

Les arbres binaires d’expressions : définitions

Type abstrait : arbres binaires d’expressions

Construction d’un arbre

Algorithmes simples : Hauteur d’un arbre

Algorithmes simples : Présence d’une feuille

Algorithmes simples : Feuillage d’un arbre

f Partie v. Algorithmes sur les arbres

Valeur d’un arbre arithmétique

Parcours en profondeur préfixe

Pile et parcours itératif : principe

Pile et parcours itératif : code

f Partie vi. Table des matières