Exercices⚓︎
Exercice 1
Q1. Écrire une classe Eleve qui contiendra les attributs nom, classe et note.
Correction
1 2 3 4 5 | |
Q2. Instancier trois élèves de cette classe.
Correction
riri = Eleve('Henri', 'TG2', 12)
fifi = Eleve('Philippe', 'TG6', 15)
loulou = Eleve('Louis', 'TG1', 8)
Q3. Écrire une fonction compare qui prend en paramètres deux élèves eleve1 et eleve2 qui renvoie le nom de l'élève ayant la meilleure note (on ne traitera pas à part le cas d'égalité).
Correction
class Eleve:
def __init__(self, nom, classe, note):
self.nom = nom
self.classe = classe
self.note = note
def compare(eleve1, eleve2):
if eleve1.note > eleve2.note:
return eleve1.nom
else:
return eleve2.nom
Exemple d'utilisation de la classe
>>> riri = Eleve("Henri", "TG2", 12)
>>> fifi = Eleve("Philippe", "TG6", 15)
>>> loulou = Eleve("Louis", "TG1", 8)
>>> compare(riri, fifi)
'Philippe'
Exercice 2
Écrire une classe TriangleRect qui contiendra les attributs cote1, cote2 et hypotenuse.
La méthode constructeur ne prendra en paramètres que cote1 et cote2, l'attribut hypotenuse se calculera automatiquement.
Exemple d'utilisation de la classe
>>> mon_triangle = TriangleRect(3,4)
>>> mon_triangle.cote1
3
>>> mon_triangle.cote2
4
>>> mon_triangle.hypotenuse
5.0
Correction
1 2 3 4 5 | |
Exercice 3
Q1. Écrire une classe Chrono qui contiendra les attributs heures, minutes et secondes.
Correction
class Chrono:
def __init__(self, h, m, s):
self.heures = h
self.minutes = m
self.secondes = s
Q2. Doter la classe d'une méthode affiche qui affichera le temps t.
Correction
class Chrono:
def __init__(self, h, m, s):
self.heures = h
self.minutes = m
self.secondes = s
def affiche(self):
print('Il est {} heures, {} minutes et {} secondes'.format(self.heures, self.minutes, self.secondes))
Q3. Doter la classe d'une méthode avance qui prend en paramètre un temps s en secondes et qui fait avancer le temps t de s secondes.
Correction
class Chrono:
def __init__(self, h, m, s):
self.heures = h
self.minutes = m
self.secondes = s
def affiche(self):
print('Il est {} heures, {} minutes et {} secondes'.format(self.heures, self.minutes, self.secondes))
def avance(self, s):
self.secondes += s
# il faut ajouter les minutes supplémentaires si les secondes
# dépassent 60
self.minutes += self.secondes // 60
# il ne faut garder des secondes que ce qui n'a pas servi
# à fabriquer des minutes supplémentaires
self.secondes = self.secondes % 60
# il faut ajouter les heures supplémentaires si les minutes
# dépassent 60
self.heures += self.minutes // 60
# il ne faut garder des minutes que ce qui n'a pas servi
# à fabriquer des heures supplémentaires
self.minutes = self.minutes % 60
Exemple d'utilisation de la classe
>>> t = Chrono(17, 25, 38)
>>> t.heures
17
>>> t.minutes
25
>>> t.secondes
38
>>> t.affiche()
'Il est 17 heures, 25 minutes et 38 secondes'
>>> t.avance(27)
>>> t.affiche()
'Il est 17 heures, 26 minutes et 5 secondes'
Aide
On pourra utiliser les opérateurs :
%, qui calcule le reste d'une division euclidienne.//, qui calcule le quotient d'une division euclidienne.
Exercice 4
Écrire une classe Player qui :
- ne prendra aucun argument lors de son instanciation.
- affectera à chaque objet créé un attribut
energievalant 3 par défaut. - affectera à chaque objet créé un attribut
alivevalantTruepar défaut. - fournira à chaque objet une méthode
blessurequi diminue l'attributenergiede 1. - fournira à chaque objet une méthode
soinqui augmente l'attributenergiede 1. - si l'attribut
energiepasse à 0, l'attributalivedoit passer àFalseet ne doit plus pouvoir évoluer.
Exemple d'utilisation de la classe
>>> mario = Player()
>>> mario.energie
3
>>> mario.soin()
>>> mario.energie
4
>>> mario.blessure()
>>> mario.blessure()
>>> mario.blessure()
>>> mario.alive
True
>>> mario.blessure()
>>> mario.alive
False
>>> mario.soin()
>>> mario.alive
False
>>> mario.energie
0
Correction
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
À faire sur Capytale : activité 2ef0-54279
Exercice 5
Créer une classe CompteBancaire dont la méthode constructeur recevra en paramètres :
- un attribut
titulairestockant le nom du propriétaire. - un attribut
soldecontenant le solde disponible sur le compte.
Cette classe contiendra deux méthodes retrait et depot qui permettront de retirer ou de déposer de l'argent sur le compte.
Exemple d'utilisation de la classe
>>> compteGL = CompteBancaire("G.Lassus", 1000)
>>> compteGL.retrait(50)
Vous avez retiré 50 euros
Solde actuel du compte : 950 euros
>>> compteGL.retrait(40000)
Retrait impossible
>>> compteGL.depot(10000000)
Vous avez déposé 10000000 euros
Solde actuel du compte : 10000950 euros
Correction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Exercice 6
Exercice 14.2 de la BNS 2024.
Exercice 7
Exercice 2 Partie A du sujet Métropole Septembre 2022
Correction Q1.a
La liste v contient 5 éléments.
Correction Q1.b
v[1].nom() renvoie Les goélands.
la classe
Villa possède un attribut nom ET une méthode nom(). Ceci est affreux et provoquerait une erreur lors de l'appel à la méthode nom().
Correction Q1.c
def surface(self):
return self.sejour.sup + self.ch1.sup + self.ch2.sup
Correction Q2
for villa in v:
if villa.eqCuis == 'eq':
print(villa.nom)
ou bien, en utilisant les getters,
for villa in v:
if villa.equip() == 'eq':
print(villa.nom())
Exercice 8
Exercice 5 du sujet Métropole J1 2022
Correction Q1
Instruction 3 : joueur1 = Joueur('Sniper', 319, 'A')
Correction Q2.a
1 2 3 | |
1 2 3 | |
Correction Q2.b
1 2 | |
Correction Q3.a
Le test est le test 1.
Correction Q3.b
Si un joueur a été touché par un tir allié, son score diminue de 20 points.
Correction Q4
1 2 | |
1 2 | |
Exercice 9
Exercice 2 du sujet La Réunion J1 2022
Correction Q1.a
1 2 3 4 | |
Correction Q1.b
1 2 3 4 | |
Correction Q2
1 2 | |
Correction Q3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Exercice 10
Exercice 3 (partie A et B) du sujet Métropole J1 2024
Partie A
Correction Q1
chien40 = Chien(40, 'Duke', 'wheel dog', 10)
Correction Q2
1 2 | |
Correction Q3
chien40.changer_role('leader')
Partie B
Correction Q4
1 2 3 4 5 6 | |
Correction Q5
eq11.retirer_chien(46)
Correction Q6
convert('4h36') va renvoyer le nombre 4.6
Correction Q7
1 2 3 4 5 | |
1 2 | |
Exercice 11
Exercice 3 du sujet Amérique du Nord J2 2024
Correction Q1
Une adresse possible est 192.168.1.17.
Comme le masque de sous-réseau est 255.255.255.0, les adresses IP de ce sous-réseau sont de la forme 192.168.1.X, où X est un nombre entre 1 et 254 (inclus), et qui ne peut pas être égal à 1 ou 2 (adresses déjà prises par Alice et Bob).
Correction Q2
La liste correspondant à ces transactions est [Transaction(Alice, Charlie, 10), Transaction(Bob, Alice, 5)]
Correction Q3
Le bloc0 est le tout premier bloc, il n'a pas de bloc précédent. Dans la méthode creer_bloc_0 de la classe Blockchain, l'attribut bloc_precedent est donc mis à None.
Correction Q4
L'attribut bloc_precedent de bloc1 est égal à bloc0.
Correction Q5
1 2 3 4 5 | |
Correction Q6
Solde de Bob = 100 + 30 - 20 - 20 = 90 nsicoins.
Correction Q7
1 2 3 | |
Correction Q8
L'adresse IP à utiliser pour envoyer simultanément la blockchain à tous les membres du réseau est l'adresse de broadcast, soit 192.168.1.255.
À la question 9, le code à utiliser est celui-ci (erreur d'énoncé à la ligne 6):
1 2 3 4 5 6 7 8 9 10 11 | |
Blockchain

Correction Q9
1 2 3 4 5 6 7 8 9 10 11 | |
Correction Q10
L'appel est ma_blockchain.tete.calculer_solde('Alice')
Correction Q11
Un recherche exhaustive est une recherche par force brute, on teste toutes les valeurs jusqu'à trouver la bonne
Correction Q12
D'après le code de la classe Bloc, si le bloc est bloc0, il n'a pas de bloc précédent et son hash sera donc '0'.
Correction Q13
Chaque bit peut prendre la valeur 0 ou 1, soit 2 possibilités. Le nombre de hashs possibles est donc \(2^{256}\).
Correction Q14
1 2 3 4 5 6 | |
Exercice 12
Exercice 1 du sujet Centres Étrangers J2 2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Pour la question 6 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Correction Q1
Un attribut est itineraire et une méthode est remplir_grille.
Correction Q2
a vaut 4 et b vaut 7.
Correction Q3
1 2 3 4 5 6 7 8 9 10 | |
Correction Q4
1 2 | |
Correction Q5
1 2 3 4 5 6 7 | |
Correction Q6
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Correction Q7
Si la largeur de la grille est 1, il n'y a qu'un seul mouvement possible (D) donc il n'y a qu'un seul chemin.
Donc \(\forall n \in \mathbb{N}, N(1,n) = 1\)
Correction Q8
\(N(m,n)\) est le nombre de trajets d'une grille de taille \(m \times n\).
Si on se place au point de départ et qu'on part vers la droite, on se trouve alors avec une grille de taille \(m \times (n-1)\) à parcourir, qui possède \(N(m, n-1)\) chemins différents.
De même, si on part vers le bas, on se trouve alors avec une grille de taille \((m-1) \times n\) à parcourir, qui possède \(N(m-1, n)\) chemins différents.
Donc \(N(m,n) = N(m-1,n) + N(m,n-1)\).
Correction Q9
1 2 3 4 | |