Autour de la programmation fonctionnelle

En programmation fonctionnelle, il existe des fonctions qui permettent de parcourir un itérable (liste, tuple, chaîne de caractères...) : map et filter.

Ces fonctions sont des fonctions d'ordre supérieur, c'est-à-dire qu'elles prennent une fonction en paramètre.

Fonction map

La fonction map permet d'appliquer une fonction à tous les éléments d'un itérable.

image

Dans l'exemple ci-dessous, on élève les éléments de nombres au carré.

def carre(x):
    return x**2

nombres = [1, 2, 3, 4, 5]
resultat = map(carre, nombres)

Attention : la fonction map renvoie un objet de type map. Dans tout cet exercice, on convertira cet objet en un objet de type list.

>>> resultat
<map object at 0x000002274B1BBF70>
>>> list(resultat)
[1, 4, 9, 16, 25]
Fonction filter

La fonction filter permet de sélectionner certains éléments d'un itérable. Si la fonction passée en paramètre renvoie True lorsqu'on lui fournit un élément, celui-ci est sélectionné. Si elle renvoie False, il n'est pas sélectionné.

image

Dans l'exemple ci-dessous, on sélectionne les éléments pairs de nombres.

def est_pair(n):
    return n % 2 == 0
>>> nombres = [1, 2, 3, 4, 5, 6]
>>> list(filter(est_pair, nombres))
[2, 4, 6]
1. Définir des fonctions

Nous allons tout d'abord définir des fonctions que l'on pourra ensuite utiliser en paramètres des fonctions map et filter.

Compléter les fonctions suivantes :

###(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

.128013nFmwgPoC,6uRèa8bsrvce!-1S9_d(Kxiyk02; 5+l4t/E.3)Afh:=êé7qDp050C0v0R0o0G0P0r0M0u0P0o0r0r0#010R0G0+010406050r0l0d0d0o0s0H040z0h0P0l0 0h0b0M020o0d0+0L0M0m0v190s0)0l0v0r050S16181a1c140+041A1H051K0S1K1M1H140C0G0t0@0_0{0}0Z0G0f0Z0P1!0Z0R12050/0q0P0v1V0`0|011Z1#1%1#0R1-1/1+0R0q0h0C1c1,0s1I0R0Z0@1f0r0+0o0b0}0K011;1X010Y0;0v0b1n0v1+2c2e2j1?2m1/2p0d2r040a0M0g0s0h0+0h0r0G1i1k0-2a0s0s0v0u2M1A2t0b1I0S282Y0R2625270C2v0}1%0b2o2J1+1S1U0^1=2,0G2.0b221T1+0+2R1I2W2Y33152d1k2@2k2|0s190P120M0y2V3713362u391?3b3d3f0K3i2e3k2W2+013p0o3e040M0V3t2X143w3n0}3z3B0M0Q3F3v373x3L3f0N3P3H3R3J3y0h3c3A3f0k3W3l381W3o3#3q3C0(3*3I3-3K3/3%3C0p3?3Y3^3!3$3M0A3~3m403T040y0J453,2^413:0y3h1B3j3X464e480y3s4j3u4l4d3a3`3B0y3E4r3G3+3S4w120y3O4A3Q4m4v424F3V4I4t4D4M493)4P4C3Z4o3=4V3@4n4E493}4!3 4$4S0y444*4K3.4S0K4b4I1J311A2=2#0C2)3x0u222B0,1T1I300v323j3P05520-5a4;0}0I120-0Y5c4#2k0e3f5n4+3a0Y121y0R0B2I2K0 5m4_5o1?11040D5s5h3y120o5K4u5G120W0!4c3x5q3C0M5Z5P3x0r0C12015*0M0c1j2T0G1j0M1w0G0M0C0%0R0v3c2`1:2K0M0l1k2|0d0q2R0M5x0M0r2$0G2T1t2o0R0M5A2L0G0Y0M5*013W5Z5!5F5i122R0R0l0s0b3P0M4W475N6B6D4e0h12020f0R0L6G6t010d0G124^33064Q3Z5j045l5#3Z5X6C5E5t3o5v045x0B1/1|2R0B0T6%405H5J6+5L0b120u6`4e5H5T5V6(3f6r732k5%5)5+5-0b5/5;5?5^5`5|6S2.6a5@620@1a0o2T0n67691/7t0s7v0R7x1:000T006n5*6q7a6Q6!6w6y6A4I6C6Q7004727T6H2k6J040#0#6P6,0}0r2h04010T6p4P6Y406!6$6~5Q0}6)7b6-5w6b0B2|0b830l0P7 0}6|895M045O7{3x755U4:7|016)7a8g3Z7d7/7f5.2M5=0l5@5_5{5}7p607s64661:691S0Y0Y0%2R0b6h2O0J7K7=6W6r7U7+017P0.7R7*6 6F7Z6Q7$0w7)8)8X6S6U3W7@4e7_0v5D356Q7~8p476.2o0B7o0l0r0u870v8c8b8~4n71995S8j6W7!1?8n5!9b7c5(8s2i7g7i1k7k8N0t0h0G1:0_0M9395975^0l7B7D7F6i1=0%681k2d7C0d0n2$1:6o7M6s8X8Z6x6z8$8l0b0q710Z0s9e5I8c9(123#0C9-6}8{8X7W7Y9_5L759$3x7$0Oa03Z8:040V4q9}8l9 7?9i6u6#8_8c8}aa3S90850I0v0P0t2`9@9/71ap2K949-768k5W799lak8q9o6o5,8u5:9t8x6i8N2*2o9K9Q9S67621:5{1o8M0o9!1:0o9G0-6S0x0-0f0s9M300n0?77408r8V0.0M9v9x9z0o0M0t3A0v6y5^a 0MaY0+a!a$680F300G0d0%8H1k0Eapar1k9V4P8Vae8Y6v8!9#8.8%7Xaw0Gaybx8la2a4400d6.0K0(0V0U0y4O9h0S5e594`bT0S4}1A0R4 bY2%2Z21232#0o1.bV4}1G5g8l2R0d0B0Y0oao0B0Z0V121s1u1w1y0M9g5b1N3k1H0X1|6gaLc30M9A0YaK5;5d536/anbmasbRcka|0%3A0G0r1:aW0M2Hbbcc6g670Y0P0h1|2e0R0r0U0M0*9Gb^2Lb6ceb02R300%cv8Oa#cc0-0?8F2R0?cEcG0/8O0?9PcS9B7v1Z2.0jce1:a/160P0/6h0h0q5{0b9G0+b46h0b000$9T8w00cxb21/b50o0+300h0u0Zbi9Fcrc|c~0Ma#d20C0l0U1J3k2=3x1^1$1(1*b:3x2x2o2q122D0i1j0r1f1:0g0H281j5c58b:345bbSdH3Z0f5H6L6Nd+0Ld-6*aF6Ecl0Baoaqcod;74129^5b6QbI6U0Ua9d 8Xac9h6Q0f7$bKbM0V0Q0Aegehei0A4ZbQd$bU2Yb.4|0.0:0=04.
Indice fonction minuscule

La fonction chr renvoie le caractère associé à une valeur Unicode.

La fonction ord renvoie la valeur Unicode associée à un caractère.

Dans le système Unicode, une majuscule et sa minuscule sont séparées de \(32\) caractères.

Indice fonction kelvin

On convertit des températures exprimées en degrés Celsius vers les degrés Kelvin en ajoutant \(273,15\).

2. Utiliser map et filter

A partir des fonctions définies précédemment (déjà chargées en mémoire) et des fonctions map et filter, compléter les requêtes suivantes :

###(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

.128013nTm%OwgPoC,*6]uRèa8bsr[vce-1S9_d(Lxiyk02; 5MlI4t/E.3)Afh:=êé7qNp050G0A0W0s0K0T0v0Q0z0T0s0v0v0*010W0K0:010406050v0p0d0d0s0w0L040D0j0T0p140j0b0Q020s0d0:0P0Q0q0A1e0w0.0p0A0v050X1b1d1f1h190:041F1M051P0X1P1R1M190G0K0y0|0~10120(0K0h0(0T1)0(0W17050@0u0T0A1!0 11011(1*1,1*0W1=1@1:0W0u0j0G1h1;0w1N0W0(0|1k0v0:0s0b120O011_1$010%0_0A0b1s0A1:2h2j2o1{2r1@2u0d2w040a0Q0i0w0j0:0j0v0K1n1p0=2f0w0w0A0z2R1F2y0b1N0X2d2%0W2b2a2c0G2A121,0b2t2O1:1X1Z0}1`2;0K2?0b271Y1:0:2W1N2#2%381a2i1p2|2p310w1e0T170Q0C2!3c183b2z3e1{3g3i3k0O3n2j3p2#2:013u0s3j040Q0!3y2$193B3s123E3G0Q0V3K3A3c3C3Q3k0R3U3M3W3O3D0j3h3F3k0n3#3q3d1#3t3*3v3H0-3/3N3=3P3@3,3H0t3{3%3}3)3+3R0E433r453Y040C0N4a3;2}463^0C3m1G3o3$4b4j4d0C3x4o3z4q4i3f3 3G0C3J4w3L3:3X4B170C3T4F3V4r4A474K3!4N4y4I4R4e3.4U4H3(4t3`4!3|4s4J4e424N1O361F2`2*0G2.3C0z272G0;1Y1N350A373o3U054{0=534P3t170W1y0:0A0w0s0W0p2W1E4N0Q4#450j170*3U5o4*2p16040x555w1{0d0K4K5B444j5y0l5u5p4j5r040B5H5a125E174T3a5C125K5M5Z015V044g4/5%5#5n5N2p5)4v5Y5I5x175L5/5%5)4u5S4z1{5.385v5^5D5F044M5@5T01633o656c5P5R5,665U684Z6b615!5`5$6l5(684(6p3C6e3z6g6q6v17496k6c6A2$6C3C5~4n6y3(6J3H5:1{6i606M686G6P455y0o3#4V3(0z0C17030Q0I0K0v5d0Q0=0{5d1t5g5i5k1D0Q2N2P140y1D4h3X172W1B0?0A0F6O6f6T125P5t5|6u0b0u171,6=6W6Q170H7r4c7n042C5d0w7v5J7t7C3f171D0W0F712Q0K0%7F626s7k6c0b5c5e6|5j5l7P6r040#0#6(7g016+6-6/6;6?6^0Q6`5f5h7Y6 0A0J350K0d0,7`1p0M0A0T0y2 764$780A7a5d0F5?7f5%7i6t7T7x7p0W7!6d7E6H6D7m171e0:8o5y7u8r77042t0F8385878A7s045{647*7U047?7X6~5m6!7D7$7(4U6)457,046.0/0j0d0u2W6@6 7?0,7^8S0Q311p0b0p0T1@8T4p8N8a8c7c4E8M8h5s8j8s8l2t8x8q8U3f8l7/9b048z9d3t7x7z5g9h9j545%8O7I0F8@9v8`9h8L8g7l7V6{8;7Z8I6#177%8X38068Z4s7V0J5d973C8i7S6D0v2m04010k0f0S0i0I0Y0S0Y0/0c0D017)5%8#6.6:6=1^7;1@215l2f0b740w14810Q5E8_0v0z8`0A884c901C8d6a9B6h969W3X9f7q9H8V9q3z8N7x8v9p8o9t0b0Fa70pa9ab9z9T898P7{9Saq5_8W9=6u9@0Q8(8*8,9|0?2+6 0Y6@2j0{0~0|0(0^2?8-0|1f0s2Y0r9G9M8 0479ag7c5Xaj6D9V947l990baxaM9l7o9gb67#as2$au179n7Bba8p9iay7H6=0F9}aY0F0YaGamaI5d9Racbi5y9K3/0X57524:bF0X4?1F0W4^bK2,2(26282*0s1?bH4?1L596D2W0d0F0%0s830F0(0!171x1z7a0{0)551S3p1M0U0T0Q7I0Q0,0h3F1y2t0W702O2PbU6@001m0_6;5g8-0{1a2+1o0h7y1o2Y0K1o0{2j1o0L2F8Tci0bck0Z1Ob^040i1fb|0J5e1@0l0Qa(0%cm2R5obE8Cbn7L147ObD4|3H0v000,0z0w2Q0Q3F3*cgbE3C1}1+1-1/bY3C0M7o1s0u0G0saHae04c}bz17b=buc d1b1ak04020h0W0Pc~4j5)5+3acW58b|c4a(a`0+6?0CcP4|c.1-1 1.2x9Ca_8ba{7ddf2pb0a~anb8ap9kbbay9m0_7Ab5dM01c^040~8*c|dF5bd09hd4d88s17d7dI3(5Pdbddd!6m17di9r6u6R6Lbv7W9F75d2aO4/dk52czb@bX0Y0b2r0bcJ1oc55k5h8?0j7AcK1^2i5h8{0r1@c)740zela%7/a54{1t0w0,0(2t2P1o0Z0Q0$2 2PcJ8|a06=0w0pcncp0|0K0B6^0v0jaD0QeY0bc40,1B1Yc1e%6 d41V4~2{45c/dxc=1Q4;dj3acQa^31aUe0d)9Ualf38J5Abi5~btf6455=fbd-fd6893d_6I7Rfcdg68aiat5-fmfgfo5W9h6%8Y7*9@0BfCfDfEfFfGfHfCad4jaR0$eta60s8w4)aQ6,8$fIfWfXfDaP6cdV0=cVdT0g3kay0%170z1f2WdSfkd*040J9h0#d(4p0Qf~d|45dV2W7Yb4d59Pf^8o5P0m0m8ofefz9s8a1b0T0@7Jawg6dGf5fu9edK8ne1bcc?4$avfQf=frdAf/2VbydTd{e 8)8+f2f?6z9J9L4p9O2pfBfYgUfGfKgSfU6.fN2X0Q0pa,8m1^2t2feAeCeEcog5a@9?gZgVg_fZgfdA5l8`gk0Fez35d=01dH6B7*5yf8dT8OgDf;gublg8e1gPh75%dVcMbhfn7Ghhhp6Uf*048Hhs3P17f0gK8}gBfl04fya@e42%512%bWe;dv1~c;34e{544/e~gg04hAa?gq6Ugphkd`17hagM3(fae19Ah%6cgegGfth:6D5)fjhD6DgH5}fpffh^6Xfwe1hGgQfAg^g`g_gX1{fMfObgic12gTiagUf!6Df$0Af(h+45hu5obieabm7J2i0Khoirarhgg=iCaNf{3#f g04jg20?5kiFi2aIiQ6K7*5P0eh4h=h!7h5s7jhx6E5*im8Bg~gj5iaBgzgnh#04i%i!3Daogth?bkivdPgj9ohfivix7K0^iBh|gN8Kh48OhYgLj98J7%i+6*i9ikfYih7+gZeIfOg(1^g*b|3d8)35g/0beFiT4O6DijjmfWjjc i-h0h2j8iU95i@h4h9hgf_i=12hm3*jc17jVi(0jhuhwi_jdgJhZiRg1177Nj!cRiyj7gAbdhWj$iG7Q7$i64x1Fe~1S4;bI4 19bI0?0^0`04.