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

.1280133è4.ênx/R8p)0EFhCDv7c256Ag9f=buS-,_l(waPké;:ors1Kqm!ydi te+050$0*0)0N0%0K0V0(0v0K0N0V0V0D010)0%0l010406050V0F0Z0Z0N0U0#040G0T0K0F0 0T0g0(020N0Z0l0R0(0j0*190U0Y0F0*0V050i16181a1c140l041A1H051K0i1K1M1H140$0%0t0@0_0{0}0q0%0A0q0K1!0q0)12050/0E0K0*1V0`0|011Z1#1%1#0)1-1/1+0)0E0T0$1c1,0U1I0)0q0@1f0V0l0N0g0}0w011;1X010C0;0*0g1n0*1+2c2e2j1?2m1/2p0Z2r040a0(0O0U0T0l0T0V0%1i1k0-2a0U0U0*0v2M1A2t0g1I0i282Y0)2625270$2v0}1%0g2o2J1+1S1U0^1=2,0%2.0g221T1+0l2R1I2W2Y33152d1k2@2k2|0U190K120(0W2V3713362u391?3b3d3f0w3i2e3k2W2+013p0N3e040(0b3t2X143w3n0}3z3B0(0d3F3v373x3L3f0x3P3H3R3J3y0T3c3A3f0y3W3l381W3o3#3q3C0u3*3I3-3K3/3%3C0k3?3Y3^3!3$3M0B3~3m403T040W0n453,2^413:0W3h1B3j3X464e480W3s4j3u4l4d3a3`3B0W3E4r3G3+3S4w120W3O4A3Q4m4v424F3V4I4t4D4M493)4P4C3Z4o3=4V3@4n4E493}4!3 4$4S0W444*4K3.4S0w4b4I1J311A2=2#0$2)3x0v222B0,1T1I300*323j3P05520-5a4;0}0P120-0C5c4#2k0M3f5n4+3a0C121y0)0J2I2K0 5m4_5o1?11040L5s5h3y120N5K4u5G120m0S4c3x5q3C0(5Z5P3x0V0$12015*0(0p1j2T0%1j0(1w0%0(0$0Q0)0*3c2`1:2K0(0F1k2|0Z0E2R0(5x0(0V2$0%2T1t2o0)0(5A2L0%0C0(5*013W5Z5!5F5i122R0)0F0U0g3P0(4W475N6B6D4e0T12020A0)0R6G6t010Z0%124^33064Q3Z5j045l5#3Z5X6C5E5t3o5v045x0J1/1|2R0J0o6%405H5J6+5L0g120v6`4e5H5T5V6(3f6r732k5%5)5+5-0g5/5;5?5^5`5|6S2.6a5@620@1a0N2T0c67691/7t0U7v0)7x1:000o006n5*6q7a6Q6!6w6y6A4I6C6Q7004727T6H2k6J040D0D6P6,0}0V2h04010o6p4P6Y406!6$6~5Q0}6)7b6-5w6b0J2|0g830F0K7 0}6|895M045O7{3x755U4:7|016)7a8g3Z7d7/7f5.2M5=0F5@5_5{5}7p607s64661:691S0C0C0Q2R0g6h2O0n7K7=6W6r7U7+017P0.7R7*6 6F7Z6Q7$0!7)8)8X6S6U3W7@4e7_0*5D356Q7~8p476.2o0J7o0F0V0v870*8c8b8~4n71995S8j6W7!1?8n5!9b7c5(8s2i7g7i1k7k8N0t0T0%1:0_0(9395975^0F7B7D7F6i1=0Q681k2d7C0Z0c2$1:6o7M6s8X8Z6x6z8$8l0g0E710q0U9e5I8c9(123#0$9-6}8{8X7W7Y9_5L759$3x7$0+a03Z8:040b4q9}8l9 7?9i6u6#8_8c8}aa3S90850P0*0K0t2`9@9/71ap2K949-768k5W799lak8q9o6o5,8u5:9t8x6i8N2*2o9K9Q9S67621:5{1o8M0N9!1:0N9G0-6S0H0-0A0U9M300c0?77408r8V0.0(9v9x9z0N0(0t3A0*6y5^a 0(aY0la!a$680h300%0Z0Q8H1k0Xapar1k9V4P8Vae8Y6v8!9#8.8%7Xaw0%aybx8la2a4400Z6.0w0u0b0e0W4O9h0i5e594`bT0i4}1A0)4 bY2%2Z21232#0N1.bV4}1G5g8l2R0Z0J0C0Nao0J0q0b121s1u1w1y0(9g5b1N3k1H0z1|6gaLc30(9A0CaK5;5d536/anbmasbRcka|0Q3A0%0V1:aW0(2Hbbcc6g670C0K0T1|2e0)0V0e0(0s9Gb^2Lb6ceb02R300Qcv8Oa#cc0-0?8F2R0?cEcG0/8O0?9PcS9B7v1Z2.0Ice1:a/160K0/6h0T0E5{0g9G0lb46h0g000f9T8w00cxb21/b50N0l300T0v0qbi9Fcrc|c~0(a#d20$0F0e1J3k2=3x1^1$1(1*b:3x2x2o2q122D0r1j0V1f1:0O0#281j5c58b:345bbSdH3Z0A5H6L6Nd+0Rd-6*aF6Ecl0Jaoaqcod;74129^5b6QbI6U0ea9d 8Xac9h6Q0A7$bKbM0b0d0Begehei0B4ZbQd$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

.128013[3è4.ênx/R8p)IL0EhC*v7c256Ag%9Nf=buS-T,_l(MwOaPék;:ors1qmyd]i te050+0:0/0U0-0P0$0.0x0P0U0$0$0H010/0-0m010406050$0J0)0)0U0#0*040K0!0P0J140!0h0.020U0)0m0Y0.0k0:1e0#0(0J0:0$050j1b1d1f1h190m041F1M051P0j1P1R1M190+0-0v0|0~10120s0-0C0s0P1)0s0/17050@0I0P0:1!0 11011(1*1,1*0/1=1@1:0/0I0!0+1h1;0#1N0/0s0|1k0$0m0U0h120y011_1$010G0_0:0h1s0:1:2h2j2o1{2r1@2u0)2w040a0.0V0#0!0m0!0$0-1n1p0=2f0#0#0:0x2R1F2y0h1N0j2d2%0/2b2a2c0+2A121,0h2t2O1:1X1Z0}1`2;0-2?0h271Y1:0m2W1N2#2%381a2i1p2|2p310#1e0P170.0%2!3c183b2z3e1{3g3i3k0y3n2j3p2#2:013u0U3j040.0c3y2$193B3s123E3G0.0e3K3A3c3C3Q3k0z3U3M3W3O3D0!3h3F3k0A3#3q3d1#3t3*3v3H0w3/3N3=3P3@3,3H0l3{3%3}3)3+3R0E433r453Y040%0q4a3;2}463^0%3m1G3o3$4b4j4d0%3x4o3z4q4i3f3 3G0%3J4w3L3:3X4B170%3T4F3V4r4A474K3!4N4y4I4R4e3.4U4H3(4t3`4!3|4s4J4e424N1O361F2`2*0+2.3C0x272G0;1Y1N350:373o3U054{0=534P3t170/1y0m0:0#0U0/0J2W1E4N0.4#450!170H3U5o4*2p16040b555w1{0)0-4K5B444j5y0N5u5p4j5r040L5H5a125E174T3a5C125K5M5Z015V044g4/5%5#5n5N2p5)4v5Y5I5x175L5/5%5)4u5S4z1{5.385v5^5D5F044M5@5T01633o656c5P5R5,665U684Z6b615!5`5$6l5(684(6p3C6e3z6g6q6v17496k6c6A2$6C3C5~4n6y3(6J3H5:1{6i606M686G6P455y0,3#4V3(0x0%17030.0p0-0$5d0.0=0{5d1t5g5i5k1D0.2N2P140v1D4h3X172W1B0?0:0O6O6f6T125P5t5|6u0h0I171,6=6W6Q170Q7r4c7n042C5d0#7v5J7t7C3f171D0/0O712Q0-0G7F626s7k6c0h5c5e6|5j5l7P6r040n0n6(7g016+6-6/6;6?6^0.6`5f5h7Y6 0:0i350-0)0W7`1p0X0:0P0v2 764$780:7a5d0O5?7f5%7i6t7T7x7p0/7!6d7E6H6D7m171e0m8o5y7u8r77042t0O8385878A7s045{647*7U047?7X6~5m6!7D7$7(4U6)457,046.0F0!0)0I2W6@6 7?0W7^8S0.311p0h0J0P1@8T4p8N8a8c7c4E8M8h5s8j8s8l2t8x8q8U3f8l7/9b048z9d3t7x7z5g9h9j545%8O7I0O8@9v8`9h8L8g7l7V6{8;7Z8I6#177%8X38068Z4s7V0i5d973C8i7S6D0$2m04010t0T0R0V0p0r0R0r0F0M0K017)5%8#6.6:6=1^7;1@215l2f0h740#14810.5E8_0$0x8`0:884c901C8d6a9B6h969W3X9f7q9H8V9q3z8N7x8v9p8o9t0h0Oa70Ja9ab9z9T898P7{9Saq5_8W9=6u9@0.8(8*8,9|0?2+6 0r6@2j0{0~0|0s0^2?8-0|1f0U2Y0d9G9M8 0479ag7c5Xaj6D9V947l990haxaM9l7o9gb67#as2$au179n7Bba8p9iay7H6=0O9}aY0O0raGamaI5d9Racbi5y9K3/0j57524:bF0j4?1F0/4^bK2,2(26282*0U1?bH4?1L596D2W0)0O0G0U830O0s0c171x1z7a0{0Z551S3p1M0o0P0.7I0.0W0C3F1y2t0/702O2PbU6@001m0_6;5g8-0{1a2+1o0C7y1o2Y0-1o0{2j1o0*2F8Tci0hck0f1Ob^040V1fb|0i5e1@0N0.a(0Gcm2R5obE8Cbn7L147ObD4|3H0$000W0x0#2Q0.3F3*cgbE3C1}1+1-1/bY3C0X7o1s0I0+0UaHae04c}bz17b=buc d1b1ak04020C0/0Yc~4j5)5+3acW58b|c4a(a`0g6?0%cP4|c.1-1 1.2x9Ca_8ba{7ddf2pb0a~anb8ap9kbbay9m0_7Ab5dM01c^040~8*c|dF5bd09hd4d88s17d7dI3(5Pdbddd!6m17di9r6u6R6Lbv7W9F75d2aO4/dk52czb@bX0r0h2r0hcJ1oc55k5h8?0!7AcK1^2i5h8{0d1@c)740xela%7/a54{1t0#0W0s2t2P1o0f0.0B2 2PcJ8|a06=0#0Jcncp0|0-0L6^0$0!aD0.eY0hc40W1B1Yc1e%6 d41V4~2{45c/dxc=1Q4;dj3acQa^31aUe0d)9Ualf38J5Abi5~btf6455=fbd-fd6893d_6I7Rfcdg68aiat5-fmfgfo5W9h6%8Y7*9@0LfCfDfEfFfGfHfCad4jaR0Beta60U8w4)aQ6,8$fIfWfXfDaP6cdV0=cVdT0S3kay0G170x1f2WdSfkd*040i9h0nd(4p0.f~d|45dV2W7Yb4d59Pf^8o5P0u0u8ofefz9s8a1b0P0@7Jawg6dGf5fu9edK8ne1bcc?4$avfQf=frdAf/2VbydTd{e 8)8+f2f?6z9J9L4p9O2pfBfYgUfGfKgSfU6.fN2X0.0Ja,8m1^2t2feAeCeEcog5a@9?gZgVg_fZgfdA5l8`gk0Oez35d=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$0:f(h+45hu5obieabm7J2i0-hoirarhgg=iCaNf{3#f g04jg20?5kiFi2aIiQ6K7*5P0Dh4h=h!7h5s7jhx6E5*im8Bg~gj5iaBgzgnh#04i%i!3Daogth?bkivdPgj9ohfivix7K0^iBh|gN8Kh48OhYgLj98J7%i+6*i9ikfYih7+gZeIfOg(1^g*b|3d8)35g/0heFiT4O6DijjmfWjjc i-h0h2j8iU95i@h4h9hgf_i=12hm3*jc17jVi(0!huhwi_jdgJhZiRg1177Nj!cRiyj7gAbdhWj$iG7Q7$i64x1Fe~1S4;bI4 19bI0?0^0`04.