Les listes Python
Remarque
Cette page rappelle rapidement les outils fondamentaux sur les listes Python.
Il ne s'agit pas d'un cours exhaustif sur ce thème.
Présentation
Les listes sont des structures de données linéaires : des valeurs stockée dans un certain ordre.
Considérons par exemple les données suivantes présentant des informations sur un animal (nom, espèce, date de naissance) :
Ces données sont organisées en colonnes :
- la première contient le nom,
- la deuxième son espèce,
- la troisième son jour de naissance,
- etc
Ces données peuvent être représentées dans un objet Python de type list
:
# indices 0 1 2 3 4
animal = ["Oli", "Chat", 10, "juin", 2018]
Dans ce cadre on distingue les indices et les valeurs des éléments :
-
l'indice correspond à la position de l'élément dans la liste (un peu comme le numéro de la colonne),
-
la valeur est le contenu à proprement parler.
Attention
En Python comme dans bien d'autres langages informatiques, les indices débutent à 0
.
Notons immédiatement que, dans une liste, les valeurs peuvent être de types variés : ici des chaînes de caractères (str
) et des entiers (int
).
Utilisation
On rappelle les opérations suivantes sur les listes :
Création
- Création d'une liste vide :
- Création d'une liste « à la main » :
animal = ["Oli", "Chat", 10, "juin", 2018]
- Création d'une liste contenant plusieurs fois la même valeur :
mille_None = [None] * 1000
Longueur
- La longueur d'une liste est donnée par la fonction
len
:
>>> repertoire = ["Clarissa", "Dalloway", 14, "May", 1925]
>>> len(repertoire)
5
Lecture de valeur
Les valeurs sont repérées par leur indice (la première est à l'indice 0
).
- On accède à une valeur en utilisant des crochets [] :
>>> repertoire = ["Clarissa", "Dalloway", 14, "May", 1925]
>>> repertoire[0]
'Clarissa'
>>> repertoire[2]
14
- La dernière valeur est à l'indice
len(repertoire) - 1
:
>>> repertoire[len(repertoire) - 1]
1925
- Python autorise les indices négatifs : la dernière valeur a pour indice
-1
, l'avant-dernière -2
, etc
>>> repertoire[-1]
1925
>>> repertoire[-2]
'May'
Modification de valeur
- On modifie des valeurs avec une simple affectation :
>>> animaux = ["éléfants", "girafes", "chevals"]
>>> animaux[0] = "éléphants"
>>> animaux[2] = "chevaux"
>>> animaux
['éléphants', 'girafes', 'chevaux']
Parcours
On considère la liste animaux = ['éléphants', 'girafes', 'chevaux']
- Parcours selon les indices :
>>> for i in range(len(animaux)):
... print("Indice :",i, "; Valeur :", animaux[i])
Indice : 0 ; Valeur : 'éléphants'
Indice : 1 ; Valeur : 'girafes'
Indice : 2 ; Valeur : 'chevaux'
- Les parcours selon les valeurs :
>>> for animal in animaux:
... print(animal)
'éléphants'
'girafes'
'chevaux'
Ajout d'éléments
- On peut ajouter des éléments à la fin d'une liste en utilisant
append()
:
>>> conjonctions = ["mais", "ou", "et", "donc", "or"]
>>> conjonctions.append("ni")
>>> conjonctions.append("car")
>>> conjonctions
['mais', 'ou', 'et', 'donc', 'or', 'ni', 'car']
- On peut aussi ajouter des éléments à la fin d'une liste en y ajoutant une autre liste par exemple avec +=
:
>>> conjonctions = ["mais", "ou", "et", "donc", "or"]
>>> conjonctions += ["ni", "car"]
>>> conjonctions
['mais', 'ou', 'et', 'donc', 'or', 'ni', 'car']
Exercices
Activité 1 - Manipulations élémentaires
Compléter le code ci-dessous afin d'effectuer les actions demandées. Au bout de 10 essais infructueux, le corrigé vous est proposé.
.128013tClH12Wà/vygj.]Ts9huqMi6Pé[dm0rA=7*fb) e:,B8np5(aSo3_4;zcx050C0O0b0X0x0d0r0N0)0d0X0r0r0H010b0x0U010406050r0u0D0D0X0F0l040Y0Z0d0u0~0Z0T050j1517191b130U04051r1k1u0j1r130C0x0k0?0^0`0|0t0x0m0t0d1I0t0b11050.0L0d0O1D0_0{011H1J1L1J0b1R1T1P0b0F1s0b0t0?1e0r0U0X0T0|0g011V1F010K0:0O0T0X0D0O1P1=1@1|1X1 1T2224110a0N0z0F0Z0U0Z0r0x1h0T0N0,1:0F0F0O0)2p1k270T1s0j1.2C1+1-1,1Q0C290|1L0T212m1P1A1C0@1W2M0x2O0T0Z2S1P0U2v1s2A2C2*141?2q2U1}2Z0F180d110N0f2z2.122-282:1X2=2@2_0g2|1@2~2A2L01330X2^040N0!372B133a310|3d3f0N0$3j392.3b3p2_0V3t3l3v3n3c0Z2?3e2_0y3A2 2/1E323F343g0I3K3m3N3o3P3H3g0S3T3C3V3E3G3q0s3#303%3x040f0E3,3M2V3(3Q0f2{1l2}3B3-3^3/0f363}383 3@2;3X3f0f3i453k3L3w4a110f3s4e3u40493)4j3z4m474h4q3:3J4t4g3D423S4z3U414i3:3!4E3$4G4w0f3+4K4o3O4w0g3=4Q484S3Q0g3|2*4u4B4H0g444$4A3.4)4d2,1x2(1k2S2F0C1-2K3D0)2!251s4^1t4?4;2,4~0,2)4L1}0)0f11030N0c0F0A0O0F0N0u2O0N1L0r0b1U0k0x2s2Z175j5p0x5r0O0#0G3?3w115q5s5E3t0N4-3^0Z110H5M5O1}10040B0p3A4%3%5c5e5g5i5k5p0X5A5C2r0O0=5x0L2v0=210~5k0=4~0D2%5B0N5`2v2`0E620b2`0!0N0W2X0@0u0=0b0Z6f5p5;5:0u0*0M5G4}5d045f5x0D5z5J5D0R6q3.5I5B5K6A4m5N4F1}5Q045S6H5U1X5W0B3t6P0|0D0x4j4V2,6J6Q110Q5T6#6V6X3:4#2}6U015W6(6O6*016W4j4+6/6^6=6)5a1X6`3:4:6}710|5W5Z4t5#3^5%6t5)5j5l0^5.5s0?2X0v0u1@5K6h6h0N7o0x1:0T5{7y0N0V660K0Z617j0k3e0O0u5l027o0Z0b0%0q7P0Z7N0u7P0%6B41110)7n7p7y5D7s0Z704R0|6L6N2*6I776;116S4m6:0r1`047V7X7S6h807Q6T6~117a7=6:6L0J7-4X6+117C5!6:0T110m2v0-2X0m0r8e3b7:8t3D6R893~6:7e5f0G0n6i5s5l150)0)5;2n0k0O247A1T0=7I1T7L0=840%0e0O0d0d7U7O7Q670N8Y0h3F0d0C8Y0N0i0N8n0O8p0T8r7Z2;8m8o0~8|8s7{6^
[email protected]^040W9i8f017}118Y8!8$8(7W85957@5W6p4W5H048_8{8}9y9j979n9D9d9f0T9h9I9o5W9m9R3b9q7 8)0%8.0F8:8Y9L8x119B4$067c8 040r3e1g0X2p948a965R8w3%6R9)3%9X8Y0R0n0F9(9V9*046?9{7@a39Z0D0E9P0!a86!9z888~1X8C0N0w2!0x1 0O0(0N9=1f0.9_0N0X1 2q7o02030!0s0%8#1T7x7z5o0C0A0r3X610Pap0|ar0Ba41i8F7L8Y0Q8,9Z1Ta+a-9w0%at9P0O8Y8z468B6s5f0W5o1?5}5*5l5w6i8O8$1U6y9,8A6^9baA9@9_a13^a0a93%736Z769j799~5P9}6@ae7~a%0Ta)a79ZaZ3c11bgaC0x1i9`bq9S7_bj1}736.386:bsbw9Jbvad9jafa=a/bD9C4BbG9?bIbKbP1X9Kbm7!9c9e9gb/78119Uamb!by9Za@0,albM3b9A3K0j570O2C2%cb4@1B4_2F2I2D0X1Sce0j4^13co0-0/0;04.
Activité 2 - Recherche d'indice
Écrire une fonction indice_min
qui prend en paramètre un tableau non vide de nombres et qui renvoie l'indice de la première occurrence du minimum de ce tableau.
- Les tableaux seront représentés sous forme de liste Python.
- On n'utilisera pas les fonctions
min
et index
.
Exemples
>>> indice_min([5])
0
>>> indice_min([2, 4, 1, 1])
2
>>> indice_min([5, 3, 2, 5, 2])
2
.128013rt=7flb)1 2e/vyg:]8swnuph5aS(o3k_i46P;[cdm0050P0m0c0B0I0g0u0k0O0g0B0u0u0d010c0I0y010406050u0x0Q0Q0B0b0p040C0E0g0x0,0E0w050n0?0^0`0|0;0y04051c151f0n1c0;0P0I0o0!0$0(0*0z0I0q0z0g1t0z0c0/050V0h0g0m1o0%0)011s1u1w1u0c1C1E1A0c0b1d0c0z0!0 0u0y0B0w0*0l011G1q010f0X0m0w0B0Q0m1A1Z1#1*1I1-1E1:1=0/0a0k0L0b0E0y0E0u0I120w0k0T1X0b0b0m0O2a151^0w1d0n1V2n1S1U1T1B0P1`0*1w0w1/271A1l1n0#1H2x0I2z0w0E2D1A0y2g1d2l2n2R0=1!2b2F1+2K0b0_0g0/0j2k2V0:2U1_2X1I2Z2#0/0l2)1#2+2l2w012:0B2$040F2@2m0;2`2.0*2}2 0J322_2V2{380/0A3b343d362|0E2!2~0/0K3i2,2W1p2/3n2;040e3s353v373x3p040t3b1g2P152D2q0P1U2v3l0O2L1?1d3N1e3L2T162*053T0T2Q3k3D010G0/0T0f3b0k3t3e0f0/2I1l0O0m0H0Q2I3J3C2G010.040D423+440w0/2K0Q0h2g0u492-3,460i0r3i0k4q3?432Y0/400w0I3=3@3l0E0/0d4z4t2/4d0E4f4h4j3u44460N4M2{400/0R4R3l460s4p4r4A3,4c040I3 2I4y3#2^4s4a1+4C044E4.2m4:4k444T044V4_0:4r4{4N1+3.040f3n4F4;4H4)5b4|4=0v3`1451543e0h0/0b1#0q0m4W4l0/48514$4b5o041}5u4O5w5E4u044e4g0m4i5y4G0*4m4n4!534q5z563`3;5l5W5d5K4L5O5c5Q0/4Q5)5g5d4-2T5P450/4Z5!5?4?020g0c0M5f555d4w5;3$5?464o51065U6c5m3l4(64612{4?4^2R6e4%4I4K5M5H1I4P6s373`6v5@045_2R6b6d535#6w4)4+4x6i4B4D6L6o5e6a6F5?572g0c0x0b5k6m6G2|3`6J652^0;0n3(0m2n2O6.3M1m3O2q2t2o0B1D6;0n3N6+0T0V0X0u04.
Activité 3 - Recherche de valeur
Écrire une fonction maximum
:
- prenant en paramètre une liste non vide de nombres :
nombres
- renvoyant le plus grand élément de cette liste.
Chacun des nombres utilisés est de type int
ou float
.
On interdit ici d'utiliser max
, ainsi que sort
ou sorted
.
Exemples
>>> maximum([98, 12, 104, 23, 131, 9])
131
>>> maximum([-27, 24, -3, 15])
24
.128013tèl12à/vygj.]sw9huqiV6Pé[-dm0r=fb)I e:,Rnp5(aSo3Lk_4+;cx050B0L0b0T0u0d0o0K0%0d0T0o0o0F010b0u0Q010406050o0s0C0C0T0E0j040U0V0d0s0|0V0P0K020T0C0Q0$0K0O0L160E0t0s0L0o050h13151719110Q04051E1x1H0h1E110B0u0i0;0?0^0`0r0u0k0r0d1V0r0b0 050,0H0d0L1Q0@0_011U1W1Y1W0b1(1*1$0b0E1F0b0r0;1c0o0Q0T0P0`0f011,1S010G0.0L0P1k0L1$2224291.2c1*2f0C2h040a0K0x0E0V0Q0V0o0u1f1h0*200E0E0L0%2C1x2j0P1F0h1~2O1{1}1|1%0B2l0`1Y0P2e2z1$1N1P0=1-2Y0u2!0P0V2(1$0Q2H1F2M2O2_12231h2*2a2/0E160d0 0e2L2}102|2k2 1.31330 0f3724392M2X013e0T34040W3i2N113l3c0`3o3q0!3t3k2}3m3z0 0R3C3v3E3x3n0V323p0 0w3C1I2@1x2(2R0B1}2W3M0%2:2r0)1O1F2?0L2^383T3%0*3/3b1R1.0Y0 0*0G3C0K3a2~3_3y0G0 160(0u0C143T3w43010~040S4c3L4e0P0 2/0C0H2H1w1y3:4d2+4f0 0I0M3J0K4C404v30460T483 413m0V0 0F4K4F3d4n0V4p4r4j3^4w4g0z4X424w0C0u0 0D4$3m4g0n4B4D4L3M3{040G3O4Q4k4w4m040i3p0L0s0E4|4Y2a0V0p0 2-564%4G044o4q1v4-3M4g4A4t3j064D5r4E4}2a4^0u3~5o2N5t574S5052545d4M0 020k0b0$5H3M4 470u5k4e5m4;5s5s4?4l4H4J5z045B5e1.4N044P5%5)3F0 511*5G5%5q4=4R0`4^2H0b540P5O5!045R3J1x3=3.3U6a0h3X1x0b3Z6f2U2P0T1)6c3X1D3@5*0`2H0C0Z0G0T0Y0L0Z0r0W0 1p1r1t1v0K5n2{1K391E0J0d0K0o000T0k2B0K0B000s2!0K2H0%0r0L0E6%1+2E5R4a0C2l0u6G0m0K0X0T0K1Y0o0b1+0y0,0P0b0K2/0P0A0i0u0*0N0K1g0K2-2B0u3p0u0o1+0?0K510E7h6m4069654I5S0h7t0K0T0i2I6{6`3-4)0c2H7n5F0E0m1I390r0e7e0B0`7o7h720L0A6$542A7B0A2y540A0?0A3c7X0*0A6~322-520 0v177V6~6#0y0%7!1O1+7(0E7D2l6,1+7;4)2f1*1x7P392(3m1:1X1Z1#3,3V6K2{7t5Z4w4^3}634~457u486/5T4Z0 4i5%8r5f5h4W8F5|4x040N8v5f7w2{8L5,5.8S5u1.4)4+8B2a4g4z678L5a5(4=8K8X0`0o0B5J1t0V5M028@8_8{0$2H0P0i0V0u7l1+6.140K237=6{6H8I6H0B02030W0q0$2-1N0%6H0u0K0l0s0o1t9g9i0$0g852c0P8`0s8^0$9C9E9G5M5W5:4@5b5y2_4C8G5D8R389L4e8U8V9U9R3y0H0 2o8#1.4g8E8W5C3y4T4V5j8.9.8M0I8P5+0 0A9`0`8Z04369?6r8M6J385`5X9!015~0+619~3n9:5i4s9-a44!9)9/049T3jaa4/9Kaa4^0L0/0Lana59K5raa5Q7vaf8UafaF8z4ba34.8DaA4 9daj4u8/8M8O5/aE5baH0 0#afa0a2akaO049_5_5X9Q8L5w9O9Z8LaR4UaiaAamaN5Pa!a 5U0 4:aY8T5J5L5Nb6aVaKaq2Nas0 a65pa:5Ya=0 5 aebb9@a`9;aTar8La~a+b0apa}b4aC5{aVawaybB04bi3ubkaDbm04bo0E62bqa4bd677x3(2O3-2O6o3W0+0-0/04.
Activité 4 - Modification d'un tableau
Écrire la fonction remplacer
prenant en argument :
- une liste d'entiers
valeurs
- un entier
valeur_cible
- un entier
nouvelle_valeur
et renvoyant une nouvelle liste contenant les mêmes valeurs que valeurs
, dans le même ordre, sauf valeur_cible
qui a été remplacée par nouvelle_valeur
.
La liste passée en paramètre ne doit pas être modifiée.
Exemples
>>> valeurs = [3, 8, 7]
>>> remplacer(valeurs, 3, 0)
[0, 8, 7]
>>> valeurs
[3, 8, 7]
>>> valeurs = [3, 8, 3, 5]
>>> remplacer(valeurs, 3, 0)
[0, 8, 0, 5]
>>> valeurs
[3, 8, 3, 5]
.128073.8217.128013.127797tCèlO12à/vygj.]TswEhuqUi6Pé[-dm0rA=7*fb) êe:,8Rnp5(aS!o3Lk_4;zcx050H0U0e0%0B0h0u0S0=0h0%0u0u0M010e0B0!010406050u0y0I0I0%0K0o040(0*0h0y170*0Z0S020%0I0!0:0S0Y0U1h0K0z0y0U0u050m1e1g1i1k1c0!04051P1I1S0m1P1c0H0B0n0 1113150x0B0p0x0h1*0x0e1a050`0Q0h0U1#1214011)1+1-1+0e1?1^1;0e0K1Q0e0x0 1n0u0!0%0Z150k011`1%010P0|0U0Z1v0U1;2d2f2k1|2n1^2q0I2s040c0S0D0K0*0!0*0u0B1q1s0^2b0K0K0U0=2N1I2u0Z1Q0m292Z2628271=0H2w151-0Z2p2K1;1Y1!101{2-0B2/0Z0*2?1;0!2S1Q2X2Z341d2e1s2^2l2}0K1h0h1a0j2W381b372v3a1|3c3e1a0k3i2f3k2X2,013p0%3f040+3t2Y1c3w3n153z3B0/3E3v383x3K1a0#3N3G3P3I3y0*3d3A1a0C3U3l391$3o3Z3q040N3(3H3+3J3-3#040X3N1T321I2?2$0H282+3X0=2~2C0@1Z1Q310U333j3|460^4e3m3?010-1a0^0P3N0S3)3Q0P1a2S1w110=0U0K3|3=2_0119040$4D3W4l0Z1a0n3A0U0y0K1H1J4f4E2l4H0W4r4t3X4N044P1^4S0.0=0B1@0U4K4k4F4Z4#4X3o1a2}0y0n0U0h1^0.4*4R4C4V3u4$4l4H0R0V3U0S5f4s4`3J4w1G0y0h0`0e4_4L4F0*1a0M5q4?4Y1a0F0s5e5g594F4n040P3Z5w3*4F4(501B2p5p572Y5h5r2l0*0v1a2{5K3Q4O4Q4S4U365i4G1a5d5S1b5g5=5U5x1|5G0B4q5:5@5L3b1a5O2B0Z5R345~3x5t040M5v5}5E604)5(0K4-4/1^4=5 1|4H5/34065?6t674%5k1e5n0%654W5V1|690r6m5$040%0!0!2p0H6H3X4H4J5:6e4{044}4 510U536h6P5a1a0R5C6t6U155G500u4;6T5,6p6+6u5f6-3y6x5m5o6%5s1a6G6?6D5j6J6L6N715y4I7b6V625Q7e155b6_6|5G2S0e4S0Z5#6w042S6y705:1c0m4h4d3}7C0m401I0e427H2)2!0%4:2Z401O4j6n154x0.0P0%0-6!0x0+1a1A1C1E1G0S6q4f1V3k2?3x0%0H0I1r2M0B1r0S0H2f0p4B1a1O7=7@7_2N0G170e24040L225Q7{7r7/7R0,0%7}5{2n0=6 0E7}1_4A0e0S0U0?4B4.4A8w0u8v1E000|0S7X1p0S4c0Z0H2S0S0u0*2{8s0S2/8L120S7^1Y2n4B0S118(0B8D1_2{7`4Q0r6{8i3 4a1X0_0{0}3x0e1G8~0;2j2I2p15934(3G1f1C1k0t8 0U0;2W991M3k1P0A8W0B0H0E1_1E0B0S0n0B5Q0S0l8(001G312M8C8v8)1e1Z2f8~7,1T7:1Z3x1~1,1.1:4b3~366T7B7S3x5G4p7s4M4v7u1B0!4z4B0.2q5{7i5-7d755^77545)9=4^6d5,4(9{6i4.4:9}1a4!9 766}6W0*4~5052a2a6045c7la05%4+4T0.3sa99_01696c666|a16h5*3j6s5D5,5G5I56axam040B9%5s5YaL8haJaa0Z0Q4w7 6=5+aa6R9=aU1a2zai6SaZatazao0uaqai0Rak7y6`7m5Z5|aSa-an55a:ara,7T9?0Fa$5Zai5Basb4avaw3j6v4Ma 4,a46l9^b46^a^6`aEaTbiapb26Cat4Hb6bm6IaMbA6Q1abaa}bc5uaN6f6Xaf6!ahbp6{aF5k7p0KaRbfaybtb13U3Va~6ga/bK6EbJbb3xby9=0I0B1a3DbD6(04a8bH3xb;1a3{b^4@a7b*15b~3/b93;aa5G1{4B6B3ubg5M5k4y0%4A6i9:a|bwbn1aa+cp6Ia2aB586@
[email protected]|cBb=040Ja=c4au5ubecf6|b/c12lc6cLcU6ocGbX5,c6c0cEbEb`cNc63:cY7jbFc9atcb13cdcNa.b0cNbdcNcTc)4lcCaib{c#aac%d4c,cJc.d1c204bGbf7z9Y7D7P8^1R041A460!9v0;0 1_0u0=0K188v4.0G0^130y0~0!0y8+0S8~8,0;0G1^741W3 8`0|0u9N2@4l7?7^0Z7`7|2{5I821R84d!d$0Z882M8b0d0Sd?0d9M7R0a0S0f508l8W0K0E2J8N8X0~0%0y8L2H1@0g2B0W8w1s0U0P0P0_dKad8v6;e6ep461gdv9s0h0b2{8D0K0y2U8g4s9Ycvaq0S0M9taA1I9Y7}1r9:8v0^0y0?8V0*0I0~8#0P0E2S64e7e9060I0T2B0S0*0Q0q0_8;0w1se23A2M0Eef05eFaAa;7A47048V0b8 e60S0y8WbM6Z8*8,dQ3k7Fdm7;3XdZ86eDd(6983fl85d#87898b8k8Q1n1peD312I2K9peg2Q2SeC1rd`dn0i39e21_0H1r0=f98We8261_1-8,0S9reO9D0TfYfV0SfX8Pe/e;0eeff%6;0K8l4Afde$0n0*0ofG2e0K8(8l5I0ZfK0Zfg8j8l8R1o2NeafE0ufGdxfGfafZ8+9K9u2P7*9z7|es9,0g9Ke88I4S8w8v9y2B1e8P2p8X0K464S9J8(7+cv8Ue~f3cveMf3ga8@0ndWd,fnd%0Zd)9jg#fu8gd:8a2C0L1p8PgdfB7|2J136k6=dRfk4l9Q201/309V7.36djbS049$cA9(ci9,ck4Ba*b7b(c|c/9?d5cRaKa26ja5hm9~cHbhacae6Z6#aoa=7-3uaDbRbs6Wc}b,hw5MaV04a)hucrhjgUhRajalhIeGbvhpaaavc 5zb:cJcXdd7cdgh#at690Oc`4|hXc?1aaHh@aLc}aP5!hchNaW0Z80hihm4(bWcxa!6)hE3Fa_h99;i26fhUh-cZ04bzim77bCiq9?h/5T6|c~ij6VhrbkaYctc*ie5;bqhHb%hZaiipiEhxisiOdeivf4ixhLd6b%fcag6$bQ5?a`046:iDibbx5.6_ighYf0h!2YcSh)i8b8hViTcg5WiWh:b4c{9|hViNi,j2i{it4HiThGi~5_bT7qh}iL7ygV4idkgYfh7Q49dX4Ffmg,g%g)frdYftd.g.8bgmfzgeeD0%4 fUf!9KgIgve20x2p2LfL8?1PfOf-gM9De8g{8Le9fBf!8%jEjL1_g22b1wjPjReDelfa4s1B042Ie#6A55dK4B9:2S1Ij`9L8?g 4Fh19Sh47C9Wh7f3i(hbhM3b9)4xhfcli7itj34Td9iz9`6hhsbljac!j16IiZbOi#kzajiGjdi(7ojhkub5hTkFiXb45`cokB7tbPkjb+040)cQiwhqkwiCcN6/0}i+k%hIkDhB55k+h{5JkNkrh 5Ziak/iKeLi|3(f2jm1V3~figZ7zjq7FdT0}04.
# Tests
(insensible à la casse)(Ctrl+I)