Analyse de programme
Instanciation¶
-
Créez une classe
Voitureavec deux attributs d’instance:couleur, qui stocke la couleur de la voiture sous forme de chaîne de caractèreskilometrage, qui stocke le nombre de kilomètres de la voiture sous forme d’entier.
-
Instanciez deux objets de type
Voiture: une voiture bleue de 20 000 kilomètres et une voiture rouge de 30 000 kilomètres. -
-
Écrire une méthode
affichede la classeVoiture: cette méthode affiche les attributs de la voitureselfcorrespondant. -
Comment utiliser cette méthode pour faire afficher :
-
Comment faire pour que les instructions
print(v1),print(v2)affichent le résultat de la question précédente ?
-
Mêmes méthodes¶
On considère le programme suivant :
1 2 3 4 5 6 7 8 9 10 11 12 | |
- Qu'affiche le programme ?
- Quelle est la particularité des méthodes de ce code ?
Interaction¶
Vous répondrez aux questions suivantes en écrivant un code python dont l'exécution fournisse le résultat attendu. En particulier, toutes les méthodes dont on demande l'écriture devront être écrites dans le corps de la classe. Le code obtenu ne sera pas nécessairement écrit de bas en haut au fur et à mesure des questions, penser à laisser éventuellement de la place.
-
-
Écrire le code d'une classe
Herosqui comporte les attributs suivants :nom,cri_victoire,cri_defaite(des chaines de caractères),force(un entier compris entre 0 et 100), etpdv(un entier valant 10 par défaut, représentant les points de vie du héro). -
Instancier deux variables de type
Heros:-
hercule, représentant le héros Hercule de force 99, criant "HAN" dans la victoire, mais "Ouch" il est blessé. -
limace, représentant le héros dit "la Limace Folle" de force 100, criant "GNIII" lorsqu'elle terrasse ses ennemis et "Blup" lorsqu'elle est blessée.
-
-
-
Écrire le code des méthodes
crier_victoireetcrier_defaite(de la classeHeros) qui affichent respectivement lecri_victoireet lecri_defaitede l'objetself.1 2 3
def crier_victoire(self): """ Heros -> None""" pass1 2 3
def crier_defaite(self): """ Heros -> None""" pass -
À chaque fois qu'un héros est blessé, le héros blessé crie (pas très héroïquement) de douleur, et ses points de vie sont diminués. Écrire une méthode
recoit_blessurede la classeHerosqui prend en argument un entiervalet qui diminue les points de vie du hérosselfde ce montant, puis affiche le cri de défaite du hérosself.Vous n'utiliserez pas l'attribut
cri_defaitedans le corps de la méthoderecoit_blessure.1 2
def recoit_blessure(self, val): """ Heros, int -> None """ -
Écrire une méthode
attaquerde la classeHerosqui prend en argument un objetotherde typeHeroset qui simule l'attaque deotherpar le hérosself:-
si la force de
otherest strictement supérieure à celle deself, alors elle afficheRien ne se passe. -
sinon, elle affiche le cri de victoire de l'objet
selfet inflige 1 point de blessure à l'objetother. La force du hérosselfest diminuée de moitiée (arrondi à l'entier supérieur) : il en faut de l'énergie pour porter un tel coup !Vous n'utiliserez pas l'attribut
pdvdans le corps de la méthodeattaquer.1 2
def attaquer(self, other): """ Heros, Heros -> None """
-
-
Qu'affiche le code suivant ?
1 2 3
hercule.attaquer(limace) limace.attaquer(hercule) print(hercule.pdv, limace.pdv) -
-
Écrire une fonction
jusqua_la_mortqui étant donné deux hérosheros1etheros2les font s'affronter en un combat singulier, jusqu'à ce que l'un d'entre eux soit terrassé (ses points de vie sont réduits à 0). À chaque round, chaque héros attaque l'autre, en commençant parhero1. La fonctionjusqua_la_mortrenverra le héros vainqueur.1 2 3
def jusqua_la_mort(herso1, heros2): """ Heros, Heros -> Heros """ pass -
Quelle instruction python permet d'afficher le nom du héros vainqueur dans le combat qui oppose Hercule à la Limace Folle ?
-
Les attributs
pdvdeheros1etheros2peuvent-ils tous les deux être réduit simultanément à0lors de l'exécution de l'instructionjusqua_la_mort(heros1, heros2)? Ce comportement est-il souhaitable ? Proposer une modification du code permettant de palier à ce problème.
-
Classes de classes¶
On se propose d'implémenter quelques fonctionnalités Yahtzee, dont le but est d'enchaîner les combinaisons à l'aide de cinq dés pour remporter un maximum de points.
Dans cette version extrêmement simplifiée, on propose de jouer selon le principe suivant :
- À chaque tour de jeu, on prend dans sa main cinq dés ;
- On répète au plus 3 fois les opérations suivantes :
- On lance tous les dés présents dans notre main ;
-
On peut mettre de côté tout ou partie des dés.
Ceux-ci ne seront pas relancés par la suite. - À l'issue des 3 lancers, tous les dés restants sont écartés. - On compte le score : celui-ci est égal à la somme des dés mis de côté.
1 2 3 4 5 6 7 8 | |
- Instancier une variable
de1. Quelle instruction doit-on utiliser pour afficher le résultat d'un lancer dé dé ? -
La classe
Jeusimule le fonctionnement simplifié du jeu de Yahtzee décrit plus haut. Toutes les méthodes dont on demande l'écriture ci-dessous sont des méthodes de la classeJeu.1 2 3 4
class Jeu: def __init__(self): self.main = [] self.des_de_cote = []-
Écrire une méthode
prendre_desqui étant donné un entiernajoute à la listeself.mainun nombrende dés. -
Écrire une méthode
lancerqui lance tous les dés présents dans la listeself.main.Cette méthode affichera également pour chaque dé lancé son indice dans la liste
self.mainainsi que le résultat du dé. -
Écrire une méthode
ecarterqui étant donné une listenumsd'indices compatibles avec la taille de la listeself.mainsupprime de cette liste les éléments dont les indices sont donnés dansnumspour les ajouter à la listeself.des_de_cote. -
Écrire une méthode
compter_scorequi calcule la somme des dés présents dans la listeself.des_de_cote. -
Écrire une méthode
jouerqui simule le fonctionnement du jeu.Remarque. L'instruction
nums = map(int, list(input("Sélectionner les dés : ")))converti l'entrée utilisateur en une liste de chiffres.
-
-
Souligner en rouge dans la description du jeu les mots correspondants aux noms des méthodes, en bleu les mots correspondant aux noms des attributs. Que constate-t-on ?
Aliassage¶
On considère la classe Point suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
-
-
Quelle instruction python permet d'instancier une variable
ade typePointreprésentant le point \(A(2 ; 4)\) ? -
Quels sont les attributs des objets de type
Point? -
Quelles sont les méthodes des objets de type
Point? -
Donner la signature complète des méthodes
deplaceetsymetriquede la classePoint. -
Qu'affiche le code ci-dessous ? Justifier votre réponse.
1 2 3 4 5 6
b = Point(1, 2) # représente B(1 ; 2) print(b) b.deplace(3, 5) print(b) b.symetrique() print(b)
-
-
-
Écrire le code d'une classe
Segment, dont les instances de classe possèdent un attributdebutet un attributfin, tous deux de typePoint. -
Écrire l'instruction python qui permet d'instancier une variable
s1représentant le segment \([AB]\).
-
-
-
Écrire une méthode
deplacede la classeSegmentqui prend en entrée deux nombres flottantsdxetdyet qui translate le segmentselfselon le vecteur \(\begin{pmatrix} \texttt{dx} \\ \texttt{dy} \end{pmatrix}\).1 2 3
def deplace(self, dx, dy): """ Segment, float, float -> None """ pass -
Écrire une méthode
symetriquede la classeSegmentqui renvoie le segment symétrique du segmentselfpar rapport à l'origine du repère.1 2 3
def symetrique(self): """ Segment -> Segment """ pass
-
-
La méthode
__str__de la classeSegmentest définie de la manière suivante :1 2
def __str__(self): return f"Segment {self.debut.x, self.debut.y} -- {self.fin.x, self.fin.y}"Quel affichage réalise le code suivant ? Justifier votre réponse.
1 2 3 4 5 6
print(s1) s1.deplace(8, 2) print(s1) s1.symetrique() print(s1) print(a, b)