Aller au contenu

Taille v5

Une classe Pile avec implémentation récursive

🐍 Script Python
class Pile():
    def __init__(self, données=None):
        self.données = données

    def est_vide(self):
        return self.données is None

    def empile(self, élément):
        reste = self.données
        sommet = élément
        self.données = (reste, sommet)

    def dépile(self):
        if self.est_vide():
            raise ValueError("Pile vide !")
        reste, sommet = self.données
        self.données = reste
        return sommet

Rappel

La différence fondamentale, ici, est qu'on introduit la possibilité d'initialiser une pile avec des données (qui ne sont pas sous forme d'une liste !!!)

On peut alors écrire

🐍 Script Python
reste, sommet = ma_pile.données

reste_pile = Pile(reste)

Et on travaille alors avec reste_pile qui possède toutes les méthodes de la classe Pile.

👍 En particulier, quand la pile est vide, reste_pile n'est pas égale à None, mais c'est une vraie pile vide ! (reste, lui, valait alors None).

👍 L'intérêt de ce genre de définition est qu'il est très commode de construire d'autres méthodes qui se prêtent bien à la récursivité.

Exercice 💥 💥

Coder une méthode taille à cette classe Pile qui renvoie le nombre d'éléments de la pile.

⚠ La méthode devra être récursive et s'appuyer sur les données disponibles.

###(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 : /
.128013x/.r;nbylaeu)dM6çz3m?(P+02è-,5fq!7 _o=pcwgv41kRIéhtsSàLCi:050o0l0Z0k0)0j0!0J0O0j0k0!0!0M010Z0)0N010406050!0m0u0u0k0e0i040#0L0j0m0~0L0g0J020k0u0N0f0J0V0l180e0G0m0l0!050c1517191b130N04051G1z1J0c1G130o0)0R0?0^0`0|0Y0)0Q0Y0j1X0Y0Z11050.0h0j0l1S0_0{011W1Y1!1Y0Z1*1,1(0Z0e1H0Z0Y1.1U010F0:0l0g1m0l010?1e0!0N0k0g0|0A1(2e2g221:251,280u2a040a0J0x0e0L0N0L0!0)1h1j0,2c0e0e0l0O2E1z2l0g1H0c202Q1}1 1~1)0o2n0|1!0g272B1(1P1R0@1/2!0)2$0g0L2*1(0N2J1H2O2Q2{142f1j2,232;0e180j110T2N2 122~2m311:3335110A392g3b2O2Z013g0k36040t3k2P133n3e0|3q3s0S3v3m2 3o3B110E3E3x3G3z3p0L343r110q3L3c301T3f3Q3h040I3E1K2_1z2*2T0o1 2Y3O0O2=2t0+1Q1H2^0l2`3a3(3=0,3}3d3Y0|0U110,0F3(3y44010P110J4a3N4c0g0F110.0:1,4h432-0110040w4q3X4s0h4u0!0l0j491A3~4b4s4u0n3E4g4I230L110C020Q0Z0f4M3W3H0h112/0Z4x3o4u0*3V4O1:4e040J4;4g4G3l4Y3O0!0o11014~1q270R0L0)1-0^0J4n0j1,0J2G560N260J4~013L4=4N4i4s46040)4F2{5l4r234A114C4E4(3O4Q040d5A4j111x0Z0K0R0)0,5F4J110w0n4+4@3w5k5k4_4c5o2J0Z0m0e0g4X4-0|0u0)110z5j4=5Y5n5H0;0l5O234*5;5W5t4y32112J0!0Z5`5U42611:4u0D5*5m62040!0L170-6e5u1:5C0M6m6a0|5w6h4D5r4H6f6o115E685?6g0o1i0g0X1x5~5W6E1:5!0-5%5)68603o5-376r3o5C0y6Y3O0g110x265{6b5Q6,3A635I672}5+4t114L6D6^5C6C6@6z6:04584p6|716_4v6{2{130c403|3)7f0c3,1z0Z3.7k2W2R0k1+7h3,1F693o2J0u0K0F0k0U0l0K0Y0t111r1t1v1x0J5T2}1M3b1G0(0-660J7A0r1i5b000X0O0e0)2J5b0m2c2G5I0J0h541j0N1f0=2C1n5a7K5b1-0,527(4N1}1i0Q047#7%2J2N830g850J7|0j007Y5L2G0m2$0J5e5a0o2g0=8l1-8o1-661n3Q0/2J0D8n0L5%0J567x7?8127152D0l0d8P1K7Q040p0/0=278n0e0k0~7K8C5a3=1g0J7.1/0l0s2c1n197q5a0H8R1O1Q3o0k0o0u1i2D0)7Y0P190g2/0Q111F8|8~902E0C0~0Z1{8T2g7|0o000l0F250O0k0O2D0X0J0v8_1I040W9t8C0k0R2K2w0i201i8C0$0?0Y0k7|1g0:0)0!8!922F1-057e3o1=1Z1#1%7v6%6)6+766n0|4u4w9.6s3p6;656?6y9/787a3~7d3?4:0Z8E660=1,0=6G0g6I7L3=0g0O0l5(6J0=8m6i0g0Z8n0_0J2J3=5eaj8P0d0J0W0j0J0!000k0Q2D0J8l0)7K2san7}ar0X0F0X2Jaf8O4?1N9z7S1_1-0u0X9J7-655b1i0O0J8-8/9o9q9saU8U9T8+597~1s2g2G0,0m0b2can270l5%0=2f0e0J0X0j0XaL0Z0!6CaW0m0j3b1!1c0)8G7Lbbbd27bfaB1iao2G0N0-8N0=741x8%b5b9ae662$8F7.2GbD8:b88?1-9M8taOaQaSagax0%1-7:0^1jbMa+bp822y8c046G0m7raN7?a=8ab-8db8ar0k0N2A0eaobT8m0)7`bsan9V7Y9E9G8l57bR0k0m6Cbm13bm0#boa8babcbe7^bw570e0B0=521f5-bK0b8CbU0eaPaR27ag8+7=7@8+a)6I0Q1@0lbRaxaY7Uc57?c70.2Ea-a-0j3Q0=148b850hcS0m8)0N7Z9E2g0.0Q6K1Ac,5D1zcj1zbj3b7i3_7c0,580!04.