Académique Documents
Professionnel Documents
Culture Documents
Chapitre 1: Récursivité
Venant du latin recursum, qui vient lui même de recurrere (revenir en arrière)
Toute formulation récursive d’une fonction possède au moins un cas de base et un cas récursif mais il y’a
plusieurs formes possibles:
- Cas de bases multiples: on peut indiquer d’autre cas de base s' il nécessitent moins de calcul de
l’indiquer
- Cas récursifs multiples: pour réduire le nombre de calculs à effectuer, on peut ajouter plus de cas
récursifs (pair/impair)
- Double récursion: on peut aussi appeler plusieurs fois la fonction
- Récursion imbriquée: on peut aussi appeler la fonction dans la fonction
- Récursions mutuelles: on définit deux fonctions mutuelles (a(n) et b(n)) avec un cas de base respectif et
qui font appel à l’autre dans leur cas récursif et à elle-même.
Les piles: Exemples de structures de données que, faute de mieux, nous appellerons des sacs. Un sac offre trois
opérations élémentaires :
1. tester si le sac est vide,
2. ajouter un élément dans le sac,
3. retirer un élément du sac (tenter de retirer un élément d’un sac vide déclenche une erreur).
Le sac est une structure impérative : un sac se modifie au cours du temps.
représentation:
x 7 puissance (7,4)
n 4
x 7 puissance (7,3)
n 3
Il est important de diminuer au maximum le nombre d’appels récursifs pour ne pas saturer la mémoire du
système.
Python limite le nombre d’appels récursifs à 1000; si excédé, le message d’erreur “RecursionError:
maximum recursion depth exceeded.”.
Pour définir une nouvelle limite on peut utiliser la fonction setrecursionlimit dans le module sys. Soit:
import sys
sys.setrecursionlimit(2000)
Chapitre 2: Modularité
2.1 Variations sur les ensembles
Paradoxe de l’anniversaire: Il suffit d’un groupe de 23 personnes pour avoir plus d’une chance sur deux d’avoir
deux personnes avec le même anniversaire.
Structure de tableau de bits: Tableau dans lequel les booléens sont remplacés par des bits pour limiter la place
de la mémoire occupée.
Module: fichiers de codes; son nom peut être retrouvé en enlevant le suffixe “.py” du nom du fichier. Il peut
dépendre d’autres modules.
Un module réalise une interface quand il remplit toutes les fonctions qu’il définit.
Encapsulation: Tous les éléments hors de l’interface auquel l’utilisateur n'a pas accès. Pour rendre privée un
module, on utilise son nom précédé du symbole “_” au début du code. Tout le reste est public et peut être
modifié par tous ceux qui ont accès au code.
Table de hachage: structure polyvalente qui permet de représenter des ensembles
Fonction de hachage: fonction qui détermine dans quel paquet l'élément doit être
2.3 Exceptions
Exception Contexte
Classe: Structure de données (dont le nom commence systématiquement par une majuscule)
Instance/Objet: une version qui suit le modèle de la classe ( ex: t=Chrono(h, m, s))
Exception Contexte
En tapant:
On peut créer une instance supplémentaire dans la classe t. Néanmoins, il ne faut pas le faire pour que le code ne
soit pas désorganisé.
Attributs de classe: attributs dont la valeur est caractéristique de la classe et ne varie pas en fonction des objets
Class Chrono
→ attribut: champs de valeurs, tableaux....
→ méthodes: fonctions
→ variable de classe
créer un objet ou une instance de la classe
On ne peut pas utiliser == entre deux objets, il renverrait Faux. Elle ne renvoie True que si on teste l’égalité
entre un objet et lui-même.
Pour vérifier que deux de nos objets contiennent les mêmes valeurs il faut définir la méthode spéciale
__eq__(self,other) qui compare les objets un par un.
Exemple :
Imaginons une classe Coffee_Machine. Lorsque l’on appuie sur le bouton Tass de Cafe (Tass_Cafe()), la
machine s’allume, fait bouillir l’eau puis nous verse un café. On peut donc dire que la méthode _innit()_
contient aussi trois autres méthodes: Demarrer_Machine(), Bouillir_Eau() et Faire_Cafe().
Pourtant la machine ne nous propose pas de boutons pour faire bouillir l’eau, donc cette méthode est une
encapsulation dans Tass_Cafe() de façon privée accessible seulement de l'intérieur du programme.
3.4 Héritage
*Hors programme*
Chapitre 4: Mise au point des programmes
4.1 Types
Un type: une classification des objets manipulés en fonction de leur nature
Chaque nom de classe Python définit un type de même nom pour toutes les instances de la classe. La fonction
type() permet de renvoyer le type.
Lors de l’utilisation de valeurs incompatible (e.g >>> 1+[2, 3]) le programme renvoie l’erreur TypeError
en précisant souvent l’endroit ou ils sont incompatibles
Il est important d’annoter son code pour aider à comprendre le code créé; on peut utiliser la forme:
Tout ce qui est après “->” n’est pas pris en compte par le programme et sert d’annotation (même fonction que la
notation “#...#”)
Il existe des outils pour vérifier des types pour Python comme:
“pytype” de Google
“pyre” de Facebook
Pour: Ensemble = List [int] On a:
Type de Paramètre:[int]
Type principal: List
On peut créer des modules qui sont compatibles avec différents des données de types différents en utilisant la
syntaxe:
La fonction “hash()” de python, appelée fonction de hachage, prend en paramètre un élément de n’importe quel
type "hashable" et renvoie un entier.
Il existe une fonction time de la bibliothèque time qui indiquent le nombre de secondes écoulées depuis un
instant de référence (1/1/1970 à 00:00); on l’appelle avec time.time()