Syntaxe de la POO

On travaille dans cet exercice sur deux classes :

  • la classe Chose permet de décrire une chose (objet, élément du décor...) utilisée dans un jeu vidéo ;
  • la classe Personnage permet de représenter un personnage du jeu.
La classe Chose

Une Chose est caractérisée par un unique attribut, son genre de type str. Ce genre doit impérativement appartenir à la liste ["livre", "pioche", "pierre", "gateau", "trésor"].

classDiagram
class Chose{
       genre : str
}
La classe Personnage

Un Personnage est caractérisé par des attributs :

  • un nom(au format str),
  • une energie (au format int, compris entre 0 et 500),
  • un inventaire (au format list).

La classe Personnage possède aussi plusieurs méthodes qui sont résumées, avec les attributs, dans le diagramme suivant :

classDiagram
class Personnage{
       nom : str
       energie : int
       inventaire : list
       prend(truc : Chose) str
       mange(truc : Chose) str
       parle(personne : Personnage) str
       donne(truc : Chose, personne : Personnage) str
}

Dans le diagramme précédent le texte prend(truc : Chose) : str signifie que la classe Personnage possède une méthode prend prenant un argument nommé truc de type Chose et qui renvoie une chaîne de caractère (str).

Complétez le code dans les différents blocs ci dessous avec les instructions valides. Chaque bloc est indépendant des autres et il est possible de le compléter dans le désordre, même s'il est conseillé de le faire dans l'ordre la première fois.

Les deux classes sont déjà définies et vous pouvez les utiliser dans chaque exercice de cette page.

I) Guybrush et Helaine

Guybrush est un pirate et il est marié avec Helaine, la Gouverneure de l'île des pirates.


Créez un personnage nommé 'Guybrush' qui a 100 d'énergie. Ce Personnage doit être affecté à la variable guy.

Créez également un personnage nommé 'Helaine' qui a 200 d'énergie. Ce Personnage doit être affecté à la variable helaine.

Création d'un Personnage

Lors de la création d'un objet type Personnage, on passe en arguments son nom puis son énergie.

🐍 Console Python
>>> batman = Personnage("Batman", 450)
>>> robin = Personnage("Robin", 300)

L'inventaire est créé automatiquement et est initialement vide.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sHobcdufvg/0ly nGapSr1me,(P2=tih)050g0y0E0s0F0n0b0p0f0n0s0b0b0D010E0F0t010406050b0h0x0x0s0v0o040u0d0n0h0Y0d0q050l0)0+0-0/0%0t040{1205150l1517120%0g0F0j0Q0S0U0W0G0F0k0G0n1l0G0E0#050L0e0n0y1g0T0V011k1m1o1m0E1u1w1s0E0e0d0g0/1t0v130E0G0Q0=0b0t0s0q0W0C011y1i010i0N0y0q0s0x0y1s1W1Y1%1A1*1w1-1/0#0a0p0B0v0d0t0d0b0F0^0q0p0J1U0v0v0y0f270{1=0q130l1S2k0E1Q1P1R0g1@0W1o0q1,241s1d1f0R1z2u0F2w0q1M1e1s0t2d132i2k2O0(1X282C1(2H0v0,0n0#0w2h2S0$2R1?2U1A2W2Y0#0C2$1Y2k2L0y2k2A2n0g2r2t010f1M1:132`162M2)2j2;38300J2N2S2~0q0#0k0h0o39040p372~0d0#0D3l3n2i3f0#0B0y0v0b0_1-0k0y3l3o2+0W0!040A3G3v3I010b1#04010r3j0e0v0h0b0G013N3e3P3K0z3t3H1h1A0x0F2!0m0m3%2*3.3J0#0H3l0%3O3`013g040G0y0S2F3F0|2%3u3(413q043s4a2=4c3_2D423x3z3B0q3D492Q404m3K3M4i384v1(3R0#010c460M2w3$4z3d4l1(3*3,4B3/3;040C3?3^2T413K3}4L0%0l3b2^14360l342l2|0{2o2n1L1N2n0s1v4*4-1e2(4-0K0M0O04.
II) Les aventures de Guybrush

En fait, Guybrush n'est pas vraiment pirate. Il rêve de l'être et s'invente de grandes aventures.

Helaine est fatiguée de l'entendre raconter ces histoires, toutes fausses, et lui lance un défi. Elle lui demande d'aller trouver le trésor de l'île aux Singes et de le lui ramener.


Faites parler Guybrush à Helaine puis faites parler Helaine à Guybrush.

Vous affecterez le résultat de ces deux conversations dans des variables conversation1 et conversation2.

Utilisation des méthodes

Il est possible d'appliquer des méthodes à un Personnage. Si perso est un objet de la classe Personnage :

  • prend : perso prend un truc (de type Chose),
  • mange : perso mange un truc (de type Chose),
  • parle : perso parle avec une autre personne (de type Personnage),
  • donne : perso donne un truc à une autre personne (respectivement de types Chose et Personnage).
Remarque sur le vocabulaire propre à Python

La documentation officielle de Python utilise un vocabulaire différent : les attributs et les méthodes d'un objet sont tous dénommés attributs. La documentation distingue alors attributs données et méthodes.

Toutes ces méthodes renvoient des chaînes de caractères décrivant le résultat de l'action.

🐍 Console Python
>>> batman.prend(bat_manuel)
'Batman prend un(e) livre'
>>> batman.donne(bat_manuel, robin)
'Batman donne un(e) livre à Robin'

Certaines actions sont impossibles. Par exemple perso ne peut pas manger un truc du genre "livre".

🐍 Console Python
>>> robin.mange(bat_manuel)
'Robin ne peut pas manger un(e) livre !'

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/ly napS.r1me(P2=tih)050f0w0B0p0C0l0b0n0e0l0p0b0b0A010B0C0q010406050b0g0v0v0p0t0m040r0c0l0g0V0c0o050k0$0(0*0,0!0q040^0 05120k12140 0!0f0C0i0N0P0R0T0D0C0j0D0l1i0D0B0Y050I0d0l0w1d0Q0S011h1j1l1j0B1r1t1p0B0d0c0f0,1q0t100B0D0N0/0b0q0p0o0T0z011v1f010h0K0w0o0p0v0w1p1T1V1!1x1%1t1*1,0Y0a0n0y0t0c0q0c0b0C0=0o0n0G1R0t0t0w0e240^1/0o100k1P2h0B1N1M1O0f1;0T1l0o1)211p1a1c0O1w2r0C2t0o1J1b1p0q2a102f2h2L0#1U252z1#2E0t0)0l0Y0u2e2P0Z2O1:2R1x2T2V0Y0z2Z1V2h2I0w2h2x2k0f2o2q010e1J1-102@132J2$2g2.352}0G2K2P2{0o0Y2}0o0i0w0t0b0p242Y0_2!0n342{0c0Y0A36043q2f3c0Y0j0g0m3w3r2(0T3t040s3F3z3H013d041U0t1t3M3b3O0X040x3V2%1e2)0Y0D0w0P2C0w3#2Q3%0T3Y0E3w0!3N3;3P3e0?3h3j3l0C0?2-3o2/3y3W3{3J3v452g473$2A3|043*3,2t3/3s0Y3L4c3a4f2S0Y3S3U4q3G3{3Y3!4x3`4g3Q3C3E4C484g3?3^0^382=11330k312i2_0^2l2k1I1K2k0p1s4P4S1b2#4S0H0J0L04.
III) Se préparer pour le voyage

Guybrush n'est pas très en forme. Il a besoin de reprendre des forces pour le voyage qui l'attend.

Il se rend à la taverne et y prend un gâteau.


Affectez à la variable gateau un nouvel objet de la classe Chose et de genre 'gâteau'.

Faites en sorte que Guybrush prenne le gâteau et affectez le résultat de cette action dans une variable resultat.

Création d'une Chose

Il est possible de créer une Chose en précisant son genre :

🐍 Console Python
>>> bat_manuel = Chose("livre")

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/ly napS.r1âme(P2=Ctih)050f0x0D0p0E0l0b0n0e0l0p0b0b0B010D0E0q010406050b0g0w0w0p0t0m040r0c0l0g0X0c0o050k0(0*0,0.0$0q040`1105140k1416110$0f0E0i0P0R0T0V0F0E0j0F0l1k0F0D0!050K0d0l0x1f0S0U011j1l1n1l0D1t1v1r0D0d0c0f0.1s0t120D0F0P0;0b0q0p0o0V0A011x1h010h0M0x0o0p0w0x1r1V1X1$1z1)1v1,1.0!0a0n0z0t0c0q0c0b0E0@0o0n0I1T0t0t0x0e260`1;0o120k1R2j0D1P1O1Q0f1?0V1n0o1+231r1c1e0Q1y2t0E2v0o1L1d1r0q2c122h2j2N0%1W272B1%2G0t0+0l0!0u2g2R0#2Q1=2T1z2V2X0!0A2#1X2j2K0x2j2z2m0f2q2s010e1L1/122_152L2(2i2:372 0I2M2R2}0o0!0j0p0D0x0p0g38040n362}0c0!0B3n3p2h3e0!0C0F230x3n3q2*0V0Z040y3E3x3G010b1!04010j0v3j3l013L3d3N3I0G3n0$3M1g2+0!2c0(0l0K0D3v3F3*0V3s043u0{2$3w3Z3@013f040j0g0m3Y2)403_0s472S40422?0o0f4c2}3I3K3|2;3?2C413g3i3k3m4n373)4q3#3%0`3a2@13350k332k2{0`2n2m1K1M2m0p1u4E4H1d2%4H0J0L0N04.
IV) Prendre des forces

Guybrush mange le gâteau, ce qui lui redonne de l'énergie.


Affectez l'énergie initiale de Guybrush à la variable nrj.

Faites le ensuite manger le gâteau et affectez le résultat dans la variable resultat.

Enfin, modifiez l'énergie de Guybrush pour qu'elle soit à 199.

Accéder aux attributs d'un objet

Si untel et unetelle sont des objets de type Personnage et truc un objet de type Chose, il est par exemple possible :

  • d'accéder à la valeur d'un attribut en saisissant inv = untel.inventaire,

  • de modifier la valeur d'un attribut en saisissant unetelle.energie = 125.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3obcdufvg/ly napS.r1me(P2=jti9h)050g0x0D0q0E0m0b0o0f0m0q0b0b0B010D0E0r010406050b0h0w0w0q0u0n040s0d0m0h0Y0d0p050l0)0+0-0/0%0r040{1205150l1517120%0g0E0j0Q0S0U0W0G0E0k0G0m1l0G0D0#050L0e0m0x1g0T0V011k1m1o1m0D1u1w1s0D0e0d0g0/1t0u130D0G0Q0=0b0r0q0p0W0A011y1i010i0N0x0p0q0w0x1s1W1Y1%1A1*1w1-1/0#0a0o0z0u0d0r0d0b0E0^0p0o0J1U0u0u0x0f270{1=0p130l1S2k0D1Q1P1R0g1@0W1o0p1,241s1d1f0R1z2u0E2w0p1M1e1s0r2d132i2k2O0(1X282C1(2H0u0,0m0#0v2h2S0$2R1?2U1A2W2Y0#0A2$1Y2(2i2t012-0q2Z040c2;2j142M0{2A2n0g2r2^0f1M1:133416322Q0|2%05390J2N2S2^0p0#0p0u0C2 040o2)2T1h1A0d0#0B3u3w2@2+0W3p040k0h0n3u3x2^3B040t3O3G3z3I0#1,0x0u0k0E0x3u0%3V2D2_0#2d0)0m0L0D3E3P3H013R3D3h2=3F3n3_3J3L3N3}303+1(3R3T453m2*3W3-040,0p0k3(4b3^4e0!040y3U404e420q0D0x0q0h4r4d3,4o0H3)4m3,423M4A3y3,494K3o3Y2w3#3%3@473A3C4U4s3,0w0E2!0F0F4F0l3k0x2k2L4-331e352n2p2l1L1N2n0q1v4:0l340%500K0M0O04.
V) Le trésor de l'île aux Singes

Après de multiples périples, bien trop longs pour être racontés ici, Guybrush arrive enfin à trouver le trésor de l'île aux Singes.

Sur le voyage de retour, pris d'hallucinations, il essaie de manger le trésor, qui heureusement n'est pas comestible.


Affectez à la variable tresor une Chose de genre 'trésor'.

Faites en sorte que Guybrush prenne le trésor et affectez le résultat à la variable resultat1.

Enfin, faites en sorte que Guybrush essaie de manger le trésor et affectez le résultat à la variable resultat2.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3obcdufvg/ly napS.r1me(P2=Ctih)é050g0x0D0q0E0m0b0o0f0m0q0b0b0B010D0E0r010406050b0h0w0w0q0u0n040s0d0m0h0Y0d0p050l0)0+0-0/0%0r040{1205150l1517120%0g0E0j0Q0S0U0W0F0E0k0F0m1l0F0D0#050L0e0m0x1g0T0V011k1m1o1m0D1u1w1s0D0e0d0g0/1t0u130D0F0Q0=0b0r0q0p0W0A011y1i010i0N0x0p0q0w0x1s1W1Y1%1A1*1w1-1/0#0a0o0z0u0d0r0d0b0E0^0p0o0J1U0u0u0x0f270{1=0p130l1S2k0D1Q1P1R0g1@0W1o0p1,241s1d1f0R1z2u0E2w0p1M1e1s0r2d132i2k2O0(1X282C1(2H0u0,0m0#0v2h2S0$2R1?2U1A2W2Y0#0A2$1Y2(2i2t012-0q2Z040c2;2j142M0{2A2n0g2r2^0f1M1:133416322Q0|2%05390J2N2S2^0p0#2o0x0b0d0u2 040o2)2T1h1A0d0#0B3w3y2@2+0W3p040C0F240x3w3z2^0!040y3R3I3B0W0b1#040X0u0H3t0u013X3n3J013U0G3w0%3Y2D2_0#2d0)0m0L0D2#3h2=3H3/3Z013D043F432j452*473L0k0h0n3.4f3`490t4l3A3`3L2L1,0g4q3T0#3W4c3m4m2V3q3}3u4x3:3=3@3S3:3L3}0h3 0q0D2:4B4e4r1(494b2O4W3o0#4i4k4B4M474o4I4g0#0,0p0k3Q4+3_1(3U4A2Q4`2,4F3s4H4_463`4K4B0%0l3k0x2k4u2k3d2l360{2o2n1L1N2n0q1v5c331e2(0l0J0L0N0b04.
VI) Fin de la quête

Victorieux, Guybrush peut enfin ramener le trésor à Helaine, qui pourra le mettre au grenier avec tous ceux qu'elle a déjà trouvés elle-même.


Faites en sorte que Guybrush donne le trésor à Helaine et affectez le résultat à la variable resultat.

Il faut également rajouter des tests à la fin.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sH3obcdufvg/ly nGapS.r1Lme,(P2=4jtwkih)é050h0A0I0s0L0n0b0p0g0n0s0b0b0F010I0L0t010406050b0i0z0z0s0w0o040u0e0n0i0)0e0q050m0:0=0@0_0.0t041219051c0m1c1e190.0h0L0k0X0Z0#0%0M0L0l0M0n1s0M0I0,050S0f0n0A1n0!0$011r1t1v1t0I1B1D1z0I0f0e0h0_1A0w1a0I0M0X0|0b0t0s0q0%0E011F1p010j0U0A0q0s0z0A1z1%1)1.1H1;1D1@1_0,0a0p0D0w0e0t0e0b0L0 0q0p0Q1#0w0w0A0g2e121|0q1a0m1Z2r0I1X1W1Y0h1~0%1v0q1?2b1z1k1m0Y1G2B0L2D0q1T1l1z0t2k1a2p2r2V0/1(2f2J1/2O0w0?0n0,0x2o2Z0-2Y1}2#1H2%2)0,0E2-1)2/2p2A012@0s2*040d2{2q0.2~2=0%31330G362r2S0A2r2H2u0h2y2 0g1T1`1a3k1d2T2:2q3f053p0Q2U2Z2 0q0,2k0:0n0S0I3f0p3w2 0e0,0F3M3O3a300,0l0i0o3y391o1H3Q040v3#3D3V3F040h102D3,2;3%0%0+040C3@2!3_3W042v0A0b0e0w3~2 3{0B3T3$2K410M0A0Z2M0A483V3{0N3f06383-400K0,1G0A0w3L132.3N4d2$0,4345474A2|4C4s4e0e0J0,2M4c4M4E044g4i3?4J3x4D3(0,3+4Z3C3^4e3/2M0k1?0S0L2k4l404a4S4+1/0b1,04010y1E2v0O4H0p440I0p0I0e0i0H5b0w0W0h1)0W0n004.4:0T2k2g1E0r3Z0f0w0i0b0M014p3U4t4v0#4x4z2V4L4{2?4F3H464`3 4N4P042O5G4B5B5Q4Q114)5I5P4U3Y3!4)5W1/3)4(2X4#3b5Y4/0q4;4?5*5:014_5!5+1H4}0,50520w54460p0q00570p1(5g5i0p5k5m5@5o1E2h0c4h0T2D5z4)0.0m3A3i1b3v0m3t2s3m122v2u1S1U2u0s1C6w6z1l2/6z0R0T0V04.
VII) Vers de nouvelles aventures

Vous pouvez utiliser l'IDE ci-dessous pour inventer vos propres aventures avec vos propres personnages.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier