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émentau sommet depile,pile.dépile(); dépile et renvoieélémentau sommet depilequi 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 `
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
.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.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)