diff --git a/TD5/correction/code/formes.py b/TD5/correction/code/formes.py
new file mode 100644
index 0000000000000000000000000000000000000000..434ce0b406b424947efe4dce44b199117aed5d9a
--- /dev/null
+++ b/TD5/correction/code/formes.py
@@ -0,0 +1,81 @@
+class Forme:
+    def __init__(self, canevas, x, y):
+        self.__canevas = canevas
+        self.__item = None
+        self.x = x
+        self.y = y
+    
+    def effacer(self):
+        self.__canevas.delete(self.__item)
+    
+    def deplacement(self, dx, dy):
+        self.__canevas.move(self.__item, dx, dy)
+        self.x += dx
+        self.y += dy
+        
+    def get_cavenas(self):
+        return self.__canevas
+    
+    def set_item(self,item):
+        self.__item = item
+    
+    def get_item(self):
+        return self.__item
+
+    def set_state(self, s):
+        self.__canevas.itemconfig(self.__item, state=s)
+
+class Rectangle(Forme):
+    def __init__(self, canevas, x, y, l, h, couleur):
+        Forme.__init__(self, canevas, x, y)
+        item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur, state="hidden")
+        self.set_item(item)
+        self.__l = l
+        self.__h = h
+    
+    def __str__(self):
+        return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}"
+
+    def get_dim(self):
+        return self.__l, self.__h
+
+    def set_dim(self, l, h):
+        self.__l = l
+        self.__h = h
+
+    def contient_point(self, x, y):
+        return self.x <= x <= self.x + self.__l and \
+               self.y <= y <= self.y + self.__h
+
+    def redimension_par_points(self, x0, y0, x1, y1):
+        self.x   = min(x0, x1)
+        self.y   = min(y0, y1)
+        self.__l = abs(x0 - x1)
+        self.__h = abs(y0 - y1)
+
+class Ellipse(Forme):
+    def __init__(self, canevas, x, y, rx, ry, couleur):
+        Forme.__init__(self, canevas, x, y)
+        item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur, state="hidden")
+        self.set_item(item)
+        self.__rx = rx
+        self.__ry = ry
+
+    def __str__(self):
+        return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}"
+
+    def get_dim(self):
+        return self.__rx, self.__ry
+
+    def set_dim(self, rx, ry):
+        self.__rx = rx
+        self.__ry = ry
+
+    def contient_point(self, x, y):
+        return ((x - self.x) / self.__rx) ** 2 + ((y - self.y) / self.__ry) ** 2 <= 1
+
+    def redimension_par_points(self, x0, y0, x1, y1):
+        self.x = (x0 + x1) // 2
+        self.y = (y0 + y1) // 2
+        self.__rx = abs(x0 - x1) / 2
+        self.__ry = abs(y0 - y1) / 2
diff --git a/TD5/correction/code/mots.txt b/TD5/correction/code/mots.txt
new file mode 100755
index 0000000000000000000000000000000000000000..d52bfc54f030dd8bd536ddcd25dac998e436aa91
--- /dev/null
+++ b/TD5/correction/code/mots.txt
@@ -0,0 +1,835 @@
+ABIME
+ABSENT
+ACCIDENT
+ACCROCHER
+ACROBATE
+ADROIT
+AEROPORT
+AFFAIRE
+AFFICHE
+AGITER
+AIDER
+AIGUILLE
+ALBUM
+ALLER
+ALPHABET
+AMENER
+AMI
+AMPOULE
+AMUSANT
+AMUSER
+ANCIEN
+ANGLE
+ANORAK
+APPAREIL
+APPEL
+APPORTER
+APPUYER
+APPUYER
+APRES
+ARC
+ARMOIRE
+ARRACHER
+ARRET
+ARRETER
+ARRIERE
+ARRIVER
+ARROSER
+ARROSOIR
+ASSIETTE
+ASSIS
+ATTACHER
+ATTENDRE
+ATTENTION
+ATTERRIR
+ATTRAPER
+AUTANT
+AUTOUR
+AVANCER
+AVANT
+AVION
+BAGAGE
+BAGARRE
+BAGARRER
+BAGUETTE
+BAIGNER
+BAILLER
+BAISSER
+BALANCER
+BALANCOIRE
+BALLE
+BALLON
+BANC
+BANDE
+BARBE
+BARBOTER
+BARRE
+BARREAU
+BAS
+BATEAU
+BATTRE
+BEAUCOUP
+BIBLIOTHEQUE
+BICYCLETTE
+BIEN
+BILLE
+BLANC
+BLEU
+BLOND
+BOIS
+BOITE
+BOITE
+BONDIR
+BONNET
+BORD
+BOTTE
+BOUCHER
+BOUCHON
+BOUDER
+BOUGER
+BOUSCULER
+BOUT
+BOUTEILLE
+BOUTON
+BRAS
+BRETELLE
+BRICOLAGE
+BRUIT
+BRUN
+BULLES
+BUREAU
+CABANE
+CABINET
+CACHER
+CAGE
+CAGOULE
+CAHIER
+CAISSE
+CALME
+CAMARADE
+CAMESCOPE
+CAMION
+CANARD
+CARNET
+CARRE
+CARREAU
+CARTABLE
+CARTE
+CARTON
+CARTON
+CASIER
+CASQUE
+CASQUETTE
+CASSE
+CASSER
+CASSEROLE
+CASSETTE
+CATALOGUE
+CEINTURE
+CERCEAU
+CERF
+CHAINE
+CHAISE
+CHAISE
+CHANGER
+CHANSON
+CHANTER
+CHAPEAU
+CHARGER
+CHATEAU
+CHAUD
+CHAUSSER
+CHAUSSETTE
+CHAUSSON
+CHAUSSURE
+CHEMISE
+CHERCHER
+CHEVILLE
+CHIFFRE
+CHOISIR
+CHOSE
+CHUCHOTER
+CHUTE
+CIGARETTE
+CINQ
+CISEAUX
+CLAIR
+CLASSE
+CLEF
+CLOU
+COEUR
+COGNER
+COIN
+COL
+COLERE
+COLLANT
+COLLE
+COLLE
+COLLER
+COLORIAGE
+COLORIER
+COMMENCER
+COMPARER
+COMPTER
+CONDUIRE
+CONSTRUIRE
+CONTE
+CONTINUER
+CONTRAIRE
+CONTRE
+COPAIN
+COPIER
+COQUIN
+CORDE
+CORPS
+COTE
+COU
+COUCHER
+COUDE
+COUDRE
+COULER
+COULEUR
+COULOIR
+COUP
+COUPER
+COUR
+COURIR
+COURONNE
+COURSE
+COURT
+COUVRIR
+CRACHER
+CRAIE
+CRAVATE
+CRAYON
+CREUSER
+CRIER
+CROCHET
+CROCODILE
+CUBE
+CUILLERE
+CUISSE
+CULOTTE
+CURIEUX
+CUVETTE
+DAME
+DANGER
+DANGEUREUX
+DANS
+DANSER
+DE
+DEBORDER
+DEBOUT
+DEBOUT
+DECHIRER
+DECOLLER
+DECORER
+DECOUPAGE
+DECOUPER
+DEDANS
+DEFENDRE
+DEGONFLER
+DEGUISER
+DEHORS
+DEMARRER
+DEMOLIR
+DEPASSER
+DERNIER
+DERRIERE
+DESCENDRE
+DESHABILLER
+DESOBEIR
+DESSIN
+DESSINER
+DESSUS
+DETRUIRE
+DEUX
+DEUXIEME
+DEVANT
+DICTIONNAIRE
+DIFFERENCE
+DIFFERENT
+DIFFICILE
+DIRE
+DIRECTEUR
+DIRECTRICE
+DISCUTER
+DISPARAITRE
+DISPUTE
+DISTRIBUER
+DIX
+DOIGT
+DOIGTS
+DOMINO
+DONNER
+DORMIR
+DOS
+DOSSIER
+DOUCHE
+DOUCHER
+DOUX
+DROIT
+DROITE
+DU
+DUR
+EAU
+EAU
+ECARTER
+ECHANGER
+ECHARPE
+ECHASSE
+ECHASSES
+ECHELLE
+ECLABOUSSER
+ECLAIRER
+ECOLE
+ECORCHER
+ECOUTER
+ECRAN
+ECRASER
+ECRIRE
+ECRITURE
+ECUREUIL
+EFFACER
+EFFORT
+ELASTIQUE
+ELEVE
+EMMENER
+EMPECHER
+EMPORTER
+ENCORE
+ENERVER
+ENFANT
+ENFILER
+ENFONCER
+ENGIN
+ENLEVER
+ENSEMBLE
+ENTENDRE
+ENTONNOIR
+ENTOURER
+ENTRER
+ENTRER
+ENVELOPPE
+ENVOLER
+ENVOYER
+ENVOYER
+EPAIS
+EPAULE
+EPEE
+EQUILIBRE
+EQUIPE
+ESCABEAU
+ESCALADE
+ESCALADER
+ESCALIER
+ESSUYER
+ETAGERE
+ETIQUETTE
+ETROIT
+EXPLIQUER
+EXPLIQUER
+EXTERIEUR
+FABRIQUER
+FACE
+FACILE
+FAIRE
+FATIGUE
+FAUTE
+FEE
+FENETRE
+FERMER
+FESSE
+FEU
+FEUILLE
+FEUTRE
+FICELLE
+FIL
+FILE
+FILET
+FILLE
+FILM
+FINIR
+FLAQUE
+FLECHE
+FLOTTER
+FOI
+FOIS
+FONCE
+FOND
+FORME
+FORT
+FOU
+FOUILLER
+FRAPPER
+FREIN
+FROID
+FUSEE
+FUSIL
+GAGNER
+GALOPER
+GANT
+GARAGE
+GARCON
+GARDER
+GARDIEN
+GARE
+GARER
+GAUCHE
+GENER
+GENOU
+GENTIL
+GLISSER
+GOMME
+GONFLER
+GOUTER
+GOUTTES
+GRAND
+GRIMPER
+GRIS
+GRONDER
+GROS
+GROUPE
+GRUE
+GYMNASTIQUE
+HABILLER
+HABIT
+HANCHE
+HANDICAPE
+HAUT
+HELICOPTERE
+HISTOIRE
+HUIT
+HUMIDE
+HURLER
+ICI
+IDEE
+IMAGE
+IMITER
+IMMOBILE
+INONDER
+INSEPARABLE
+INSTALLER
+INSTRUMENT
+INTERESSANT
+INTERIEUR
+INTRUS
+JALOUX
+JAMAIS
+JAMBE
+JAUNE
+JEAN
+JEU
+JEU
+JOLI
+JONGLER
+JOUER
+JOUET
+JOUEUR
+JUPE
+LACER
+LACET
+LAINE
+LAISSER
+LANCER
+LARGE
+LAVABO
+LAVER
+LETTRE
+LEVER
+LIGNE
+LINGE
+LIRE
+LISSE
+LISTE
+LIT
+LITRE
+LIVRE
+LOIN
+LONG
+LUNETTES
+MADAME
+MAGAZINE
+MAGICIEN
+MAGIE
+MAGNETOSCOPE
+MAILLOT
+MAIN
+MAINS
+MAITRE
+MAITRESSE
+MAL
+MALADROIT
+MANCHE
+MANQUER
+MANTEAU
+MARCHE
+MARCHER
+MARIONNETTE
+MARTEAU
+MATELAS
+MATERNELLE
+MECHANT
+MELANGER
+MEME
+MENSONGE
+MESURER
+METAL
+METRE
+METTRE
+MEUBLE
+MICRO
+MIEUX
+MILIEU
+MINE
+MODELE
+MODELER
+MOINS
+MOITIE
+MONTAGNE
+MONTER
+MONTRER
+MONTRER
+MORCEAU
+MOT
+MOTEUR
+MOTO
+MOUCHOIR
+MOUFLE
+MOUILLE
+MOUILLER
+MOULIN
+MOUSSE
+MOYEN
+MUET
+MULTICOLORE
+MUR
+MUR
+MUSCLE
+MUSIQUE
+NAGER
+NEUF
+NOEUD
+NOIR
+NOM
+NOMBRE
+NOUVEAU
+NU
+NUMERO
+OBEIR
+OBJET
+OBLIGER
+ONGLE
+ORCHESTRE
+ORDINATEUR
+ORDRE
+OUTIL
+OUVRIR
+OUVRIR
+PAGE
+PAIRE
+PAIX
+PANNE
+PANTALON
+PAPIER
+PARCOURS
+PARDON
+PAREIL
+PARKING
+PARLER
+PARTAGER
+PARTIE
+PARTIR
+PARTIR
+PAS
+PASSERELLE
+PATE
+PATTES
+PEDALE
+PEDALER
+PEINDRE
+PEINTURE
+PEINTURE
+PELLE
+PELUCHE
+PENCHER
+PENTE
+PERCER
+PERCHER
+PERDRE
+PERLE
+PERSONNE
+PETIT
+PEU
+PEUR
+PHOTO
+PIED
+PIED
+PILOTE
+PINCEAU
+PINCEAU
+PINCER
+PION
+PIROUETTE
+PLACARD
+PLAFOND
+PLAINDRE
+PLANCHE
+PLASTIQUE
+PLATRE
+PLEURER
+PLEUVOIR
+PLI
+PLIAGE
+PLIER
+PLONGEOIR
+PLONGER
+PLUIE
+PLUS
+PNEU
+POCHE
+POIGNET
+POING
+POINT
+POINTU
+POISSON
+POLI
+POMPE
+PONT
+PONT
+PORTE
+PORTER
+POSER
+POSER
+POSTER
+POT
+POUBELLE
+POUCE
+POURSUIVRE
+POUSSER
+POUTRE
+POUVOIR
+PREAU
+PREMIER
+PRENDRE
+PRENOM
+PREPARER
+PRES
+PRESENT
+PRESQUE
+PRESSER
+PRESSER
+PRETER
+PRINCE
+PRISE
+PRIVER
+PROGRES
+PROGRESSER
+PROMETTRE
+PROPRE
+PROTEGER
+PUNIR
+PUZZLE
+PYJAMA
+QUAI
+QUATRE
+QUESTION
+QUITTER
+RACONTER
+RADIATEUR
+RADIO
+RAMPE
+RAMPER
+RANG
+RANGER
+RAQUETTE
+RATER
+RAYON
+RAYURE
+RECEVOIR
+RECHAUFFER
+RECITER
+RECOMMENCER
+RECREATION
+RECULER
+REFUSER
+REGARDER
+REINE
+REMETTRE
+REMPLACER
+REMPLIR
+RENVERSER
+REPARER
+REPETER
+REPONDRE
+RESPIRER
+RESSEMBLER
+RESTER
+RETARD
+RETOURNER
+REUSSIR
+REVENIR
+RIDEAU
+RIVIERE
+ROBE
+ROBINET
+ROI
+ROND
+ROND
+ROUE
+ROUGE
+ROULADE
+ROULER
+ROUX
+RUBAN
+SABLE
+SAC
+SAGE
+SAIGNER
+SALADIER
+SALE
+SALIR
+SALLE
+SALON
+SAUT
+SAUTER
+SCIE
+SEAU
+SEC
+SECHER
+SEMELLE
+SENS
+SENTIR
+SEPARER
+SEPT
+SERIEUX
+SERPENT
+SERRE
+SERRER
+SERRURE
+SERVIETTE
+SERVIR
+SEUL
+SIEGE
+SIESTE
+SIFFLER
+SIFFLET
+SIGNE
+SIGNE
+SILENCE
+SINGE
+SIX
+SOCIERE
+SOL
+SOLDAT
+SOLIDE
+SOMMEIL
+SONNER
+SONNETTE
+SORTIE
+SORTIR
+SOUFFLER
+SOULEVER
+SOULIGNER
+SOUPLE
+SOURD
+SOURIRE
+SOUS
+SOUVENT
+SPORT
+STYLO
+SUIVANT
+SUIVRE
+SUR
+SURVEILLER
+TABLE
+TABLEAU
+TABLIER
+TABOURET
+TACHE
+TAILLE
+TAILLER
+TALON
+TAMBOUR
+TAMPON
+TAPER
+TAPIS
+TARD
+TAS
+TASSE
+TELECOMMANDE
+TELEPHONE
+TELEVISION
+TENDRE
+TENIR
+TERMINER
+TETE
+TIRER
+TIROIR
+TISSU
+TITRE
+TOBOGGAN
+TOILETTE
+TOMBER
+TORDU
+TOT
+TOUCHER
+TOUJOURS
+TOUR
+TOURNER
+TOURNEVIS
+TRAIN
+TRAINER
+TRAIT
+TRAMPOLINE
+TRANQUILLE
+TRANSPARENT
+TRANSPIRER
+TRANSPORTER
+TRAVAIL
+TRAVAILLER
+TRAVERSER
+TREMPER
+TRICOT
+TRICYCLE
+TRIER
+TROIS
+TROISIEME
+TROMPETTE
+TROP
+TROUER
+TROUS
+TROUSSE
+TROUVER
+TROUVER
+TUNNEL
+TUYAU
+UN
+UNIFORME
+USE
+VALISE
+VELO
+VENIR
+VENTRE
+VERRE
+VERS
+VERSER
+VERT
+VESTE
+VETEMENT
+VIDER
+VIRAGE
+VIS
+VITE
+VITESSE
+VITRE
+VOITURE
+VOIX
+VOLANT
+VOLER
+VOULOIR
+VOYAGE
+WAGON
+XYLOPHONE
+ZERO
+ZIGZAG
diff --git a/TD5/correction/code/pendu.py b/TD5/correction/code/pendu.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7d17932fabe9fb380f6c150513e9b6f52139de7
--- /dev/null
+++ b/TD5/correction/code/pendu.py
@@ -0,0 +1,156 @@
+#pendu5.py
+from tkinter import *
+from random import randint
+from formes import *
+
+class ZoneAffichage(Canvas):
+    def __init__(self, parent, w, h, c):
+
+        Canvas.__init__(self, master=parent, width=w, height=h, bg=c)
+
+        # Listes des formes du pendu, dans l'ordre du dessin
+        self.__listeShape = []
+
+        # Base, Poteau, Traverse, Corde
+        self.__listeShape.append(Rectangle(self, 50,  270, 200,  26, "brown"))
+        self.__listeShape.append(Rectangle(self, 87,  83,   26, 200, "brown"))
+        self.__listeShape.append(Rectangle(self, 87,  70,  150,  26, "brown"))
+        self.__listeShape.append(Rectangle(self, 183, 67,   10,  40, "brown"))
+        # Tete, Tronc
+        self.__listeShape.append(Ellipse(self,   188, 120,  20,  20, "black"))
+        self.__listeShape.append(Rectangle(self, 175, 143,  26,  60, "black"))
+        # Bras gauche, droit
+        self.__listeShape.append(Rectangle(self, 133, 150,  40,  10, "black"))
+        self.__listeShape.append(Rectangle(self, 203, 150,  40,  10, "black"))
+        # Jambes gauche et droite
+        self.__listeShape.append(Rectangle(self, 175, 205,  10,  40, "black"))
+        self.__listeShape.append(Rectangle(self, 191, 205,  10,  40, "black"))
+
+    def cachePendu(self):
+        for f in self.__listeShape:
+            f.set_state("hidden")
+
+    def dessinePiecePendu(self, i):
+        if i<=len(self.__listeShape):
+            self.__listeShape[i-1].set_state("normal")
+
+class MonBoutonLettre(Button):
+    def __init__(self, parent, fen, t):
+        Button.__init__(self, master=parent, text=t, state=DISABLED)
+        self.__fen=fen
+        self.__lettre=t
+
+    def cliquer(self):
+        self.config(state=DISABLED)
+        self.__fen.traitement(self.__lettre)
+
+
+class FenPrincipale(Tk):
+    def __init__(self):
+        Tk.__init__(self)
+        self.title('Jeu du pendu')
+        self.configure(bg="#2687bc")
+
+        # La barre d'outils
+        barreOutils = Frame(self)
+        barreOutils.pack(side=TOP, padx=5, pady=5)
+        newGameButton = Button(barreOutils, text ='Nouvelle partie', width=13)
+        newGameButton.pack(side=LEFT, padx=5, pady=5)
+        quitButton    = Button(barreOutils, text ='Quitter',         width=13)
+        quitButton.pack(side=LEFT, padx=5, pady=5)
+
+        # Le canvas pour le dessin du pendu
+        self.__zoneAffichage = ZoneAffichage(self, 320, 320, "#ec4062")
+        self.__zoneAffichage.pack(side=TOP, padx=5, pady=5)
+
+        # Le mot à deviner
+        self.__lmot = Label(self, text='Mot :')
+        self.__lmot.pack(side=TOP)
+
+        # Le clavier
+        clavier = Frame(self)
+        clavier.pack(side=TOP, padx=5, pady=5)
+        self.__boutons = []
+        for i in range(26):
+            t = chr(ord('A')+i)
+            self.__boutons.append(MonBoutonLettre(clavier, self, t))
+
+        # Placement des boutons du clavier
+        for i in range(3):
+            for j in range(7):
+                self.__boutons[i*7+j].grid(row=i,column=j)
+        for j in range(5):
+            self.__boutons[21+j].grid(row=3,column=j+1)
+
+        # Commandes associées aux boutons
+        quitButton.config(command=self.destroy)
+        newGameButton.config(command=self.nouvellePartie)
+        for i in range(26):
+            self.__boutons[i].config(command=self.__boutons[i].cliquer)
+
+        # initialisation des attributs
+        self.__mot = ""
+        self.__motAffiche= ""
+        self.__mots= []
+        self.__nbManques  = 0
+
+        # Chargement du fichier de mots
+        self.chargeMots()
+
+        # On commence une nouvelle partie
+        self.nouvellePartie()
+
+    def chargeMots(self):
+        f = open('mots.txt', 'r')
+        s = f.read()
+        self.__mots = s.split('\n')
+        f.close()
+
+    def nouvellePartie(self):
+
+        # Boutons-lettres dégrisés
+        for i in range(26):
+            self.__boutons[i].config(state=NORMAL)
+
+        # Nouveau mot à devnier et update
+        self.__mot        = self.__mots[randint(0,len(self.__mots)-1)]
+        self.__motAffiche = len(self.__mot)*'*'
+        self.__lmot.config(text='Mot : '+self.__motAffiche)
+
+        # on re-init le nbre de coups manqués et on efface le précédent dessin
+        self.__nbManques = 0
+        self.__zoneAffichage.cachePendu() #---> on cache le pendu en utilisant la couleur de fond
+
+    def traitement(self, lettre):
+        cpt = 0
+        lettres = list(self.__motAffiche)
+        for i in range(len(self.__mot)):
+            if self.__mot[i]==lettre:
+                cpt +=1
+                lettres[i]=lettre
+
+        self.__motAffiche = ''.join(lettres)
+
+        if cpt ==0:
+            self.__nbManques += 1
+            self.__zoneAffichage.dessinePiecePendu(self.__nbManques) #---> Dessin de l'elt suivant
+            if self.__nbManques >= 10:
+                self.finPartie(False)
+        else:
+            self.__lmot.config(text='Mot : '+self.__motAffiche)
+            if self.__mot == self.__motAffiche:
+                self.finPartie(True)
+
+    def finPartie(self, gagne):
+        for b in self.__boutons:
+            b.config(state=DISABLED)
+
+        if gagne :
+            self.__lmot.config(text=self.__mot+' - Bravo, vous avez gagné')
+        else :
+            self.__lmot.config(text='Vous avez perdu, le mot était : '+self.__mot)
+
+
+if __name__ == '__main__':
+    fen = FenPrincipale()
+    fen.mainloop()
diff --git a/TD5/correction/diagramme_classes_pendu.png b/TD5/correction/diagramme_classes_pendu.png
new file mode 100644
index 0000000000000000000000000000000000000000..78a06339ad5447869fa96f0dbdd0d5fbd2c248a9
Binary files /dev/null and b/TD5/correction/diagramme_classes_pendu.png differ