Aller au contenu

Filtre des nombres positifs d'une pile

Le cadre

On donne une mise en œuvre la structure de Pile avec les listes Python qui permet d'initialiser une pile non vide.

🐍 Script Python
class Pile:
    def __init__(self, valeurs=None):
        """Initialise une pile
        - vide, si `valeurs` n'est pas fourni ;
        - remplie avec `valeurs` sinon.
            - Le sommet de la pile est à la fin de la liste.
        """
        if valeurs is None:
            self.valeurs = []
        else:
            self.valeurs = valeurs

    def est_vide(self):
        "Renvoie un booléen : la pile est-elle vide ?"
        return self.valeurs == []

    def __str__(self):
        "Affiche la pile, en indiquant le sommet"
        return "| " + " | ".join(map(str, self.valeurs)) + ' <- sommet'

    def dépile(self):
        """
        - Si la pile est vide, provoque une erreur.
        - Sinon, dépile un élément au sommet et le renvoie.
        """
        if self.est_vide():
            raise ValueError("Erreur, pile vide !")
        else:
            return self.valeurs.pop()

    def empile(self, élément):
        "Empile un élément au sommet de la pile"
        self.valeurs.append(élément)

Exercice

Écrire une fonction filtre_positif qui prend en paramètre données de type Pile d'entiers et qui renvoie une pile qui contient les éléments positifs de données. La pile données doit être globalement inchangée à l'issue du traitement.

⚠ Contraintes : Pour cet exercice, on n'utilisera que les méthodes de la classe Pile et non les méthodes des listes Python. À savoir, uniquement :

  • Création de pile vide avec une_pile = Pile(),
  • Test si une pile est vide avec une_pile.est_vide() ; renvoie un booléen,
  • pile.empile(élément) ; empile un élément au sommet de pile,
  • pile.dépile() ; dépile et renvoie élément au sommet de pile qui est non vide.
Exemples
>>> données = Pile([4, -11, 7, -3, -1, 0, 6])
>>> print(filtre_positifs(données))
| 4 | 7 | 0 | 6 <- sommet
>>> print(données)
| 4 | -11 | 7 | -3 | -1 | 0 | 6 <- sommet
>>> données = Pile([1, 2, 3, 4])
>>> print(filtre_positifs(données))
| 1 | 2 | 3 | 4 <- sommet
>>> print(données)
| 1 | 2 | 3 | 4 <- sommet

```pycon title=""

données = Pile([-4, -3, -2, -1]) print(filtre_positifs(données)) | <- sommet print(données) | -4 | -3 | -2 | -1 <- sommet `

###(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;nbOylaeu)dM63Am?(Pô02è-],59fq!78 N_o=pcwgv41`kRIéhtsSàL[i:E050p0m0(0l0.0k0)0M0S0k0l0)0)0Q010(0.0R010406050)0n0u0u0l0e0j040*0P0k0n140P0g0M020l0u0R0f0M0!0m1e0e0I0n0m0)050c1b1d1f1h190R04051M1F1P0c1M190p0.0V0|0~10120%0.0U0%0k1%0%0(17050@0h0k0m1Y0 11011$1(1*1(0(1:1=1.0(0e1N0(0%1@1!010H0_0m0g1s0m010|1k0)0R0l0g120A1.2k2m281_2b1=2e0u2g040a0M0x0e0P0R0P0)0.1n1p0=2i0e0e0m0S2K1F2r0g1N0c262W2325241/0p2t121*0g2d2H1.1V1X0}1^2*0.2,0g0P2:1.0R2P1N2U2W311a2l1p2=292`0e1e0k170M0X2T3518342s371_393b3d0A3g2m3i2U2)013n0l3c040M0s3r2V193u3l123x3z0M0W3D3t353v3J3d0F3N3F3P3H3w0P3a3y3d0r3U3j361Z3m3Z3o3A0K3(3G3+3I3-3#3A0L3;3W3?3Y3!3K0G3|3k3~3R040X0z433*2?3 3.0X3f1G3h3V444c460X3q4h3s4j4b383^3z0X3C4p3E3)3Q4u170X3M4y2W2~0m2W2:2Z0p252(3X0S2{2z0;1W1N4I303h3N054R0=4Y4k290Z170=0H4!3=4c0T3d4/3}4l0H172v230m0O2G2I140H1E4G4A3X16040w4@4)3m4,1o0g0$1D5b4s1_580o0/3U0M5q0M5645170l0n0b0_0.0^2P3N5s4:290P170Q5D5t4l170x2c5j3v580w0o5p5r5L4*170T1$1=5K5F1_0P4=042`0(5%4^385e0g5g5i555(125H040d5Q3X0g171D0(0O0V0.0=5 3~5S5n5V5r5W5`3w170$0k0$2y0g5.4G5E5:5)5I5/5c3I5=5@54336g5|5~5_6r6w040p0$0R5P6E6v016b6d6e6q6N61045w5y1*5B0m694c6C6#5;041y6K5$6M5k125S6(5d046j6l2d6o6A6F6O175U4G06066e5X6?0e0$1b0k0@6{3h6S6/015|5J6p756G5O6-6|6N6P71746g4+045!6L317e3v5*175-6u7f6U6W5z6Z6=5{176D7o7F620)6466686.5R175T5o7r6R5q7k6h6@6k6m7c3s7z3X7h7E3Q5v5x7I0.5C7V7/7M7K7(6I6,6!7{6a7X7031737#7.5u6H5f5h6z4Z6B7}835M6*1t7x8g6}6;8j6)6^7+7~5m6Q7s6}7u0.4.7j6g6U8t6`7;7|04020U0(0f7i7y7%0u0.17498r5l177Z87896R7%6U77797b7~6%8W6G6+8n3s7%8q7O7=7)6_6n8v6 3U887$7t172P0(0n0e0g8I8b8)0n7a0l7,4z0c4$4J1Q2 1F4L1F0(4N9o2$2X0l1;9j0c4L1L4(7f2P0u0O0H0l0Z4~0%0s171x1z1B1D0M8Z4Z1S3i2:3v0l0p0u1o2J0.1o0M0p2m0U0m0e171L9W9Y9!2K0C140(21040x0 9(1?2l0e1s0B4}0{0u1m9u1=0{a09(0$9F1m1Q3i1M0i1p0l0M0$0S0e2J2N2P2R1y6`0M0~0M0H1o2R9$1p4#4S040O2^2J0O1F9i3A0l0V2Q0M0n1pa0a24}0Mab6Iae0(6D1T4U2;3~1{1)1+1-9A3v2v2d2f172B0*ao150(2C0j261o4!4X3)324ZaM7%7u4-7~5+5s8.2a0u170OaH0gaJaKbd8@8o6N0h580)0m0k8C8^57170E998k0V3y0m968f8=8h048Pbo7f0Z0S170N1o82bw84046c717%bb5Wbd0)0p1701b)0#bj143y0.bsaR2,aX8;4z6gb$3d5r0C0M7T0m0E0M2I0M0YbC1=bF0Y0M0g0063aX9}az96bj0M0f4a3vb`3Ab|0M9C0R1*1?aOaQc5bDc8c22^1o7N4i7%cn8#b}0,1?0)0P1d0?9~awal810Mcd0+cQay2^cPax1*7R0mcD4qcFb%co5qb)016Qb7178BbA6)c6bE0ebG2V8a6$5+b/c@1_bNbPbR8}049R4q8#7%bq17bsbu8,8ibTbBcyc{d27LbJdn6~040-0Dc:926*0`bSbL7Wd88x6f6}dd04dfbvdA8Jc(2V8%17c_bFdq7:8D6}6UdQdmbX9haF9k9w9y1O040#0kca1?a!ce0{anap2Pb;d.aA2K2icN0|0.0C0=100P0n0{7Za%9V3Xa+1}1,2q6}a;2x2za^a`0Ra|0xa~0%b055b23355b6dwb9bdbb7~0g4`04dJbH8p7Xez170bdhdpbm17dt864i8y6N6C0ddM3id!4%d$4K4V9z0q0^0{0_ay5wa|cs1m0ya|0k00d=7_82e71W3veaa-ed6Nefa?2A0Ma_apeka}a 98eq9les33eu8z4,0meDdN6geybdeA4{d75afneIeKbKeE6Nd404bQ2,d7bW8!dEfxc=fj3AdO04eJdUeSd0c|fJ7tbOfzd6eMdC7!7#fKfM8QbIfvc}8?eNdufYc~5G7MeU3(eX9wb29xe#d)1a231o0U9{e31A0n0P0.0M0v2Tf}0gf ag191k3i1*040t0naX9C0.9,0M0l0R0Rbt5saM0H5TaLaFc1aS1?c#0(1?cdao5haXg1gtaFfMb60cgg19gg0*g50S0?gDawb/gWcd9Z1V2b5hc1bt1=gI96a1aq2bbj0eca9%b 0M0J1FgP05gRg59%gpgr0kg+cV2`0naP5wgK4%gv70aMc22maa1faV2Pbz9cgf0.6V0k3Z0{aEhbgx4%0M23aO0^h3cuaP0ScWgC9 770S0$0=cN6n0|77gH0JhRg{hogQhof|2Ega040:6{g9f 0|1?cbcd0U0$5ga11=7+d:aw1?4R1t3ZgDh=cL0n0%0^0(0$g_hRhSgOhU1Fhm19i7hn1ig 1p1m5zb:ht4JgveOhv4J0Me3c4imeU0d0D5Uiag}ho5w0SaSgk0P1;0B2y9(hgh)0|0 c11eb/0|cc7Raw00ihc#9eaCg?40c0hf0ghha10ua3d@aYade,6Dg|0ciyicibgeibd(9x0?hA0)04.