Rechercher un élément dans un tableau trié

L'objectif de cet exercice est d'écrire une fonction indice

  • qui prend en argument :
    • un tableau valeurs d'éléments comparables rangés dans l'ordre croissant
    • une valeur cible, comparable à celles du tableau
  • qui renvoie :
    • l'indice de cible dans le tableau s'il en fait partie
    • None sinon

La fonction indice utilisera une fonction indice_recursive qui sera récursive et qui prendra les mêmes arguments que indice, et en plus debut et fin qui désigneront les indices pour la recherche : de debut inclus à fin inclus.

Remarque

Le tableau valeurs pourra être rempli d'entiers ou rempli de chaines de caractères, sans aucun changement à procéder ; en effet ce sont des éléments comparables entre eux, ordre naturel pour les entiers, ordre lexicographique pour les chaines de caractères.

Exemples
>>> nombres = [2, 3, 5, 7, 11, 13, 17]
>>> indice(nombres, 7)
3
>>> indice(nombres, 8) is None
True
>>> fruits = ["abricot", "kiwi", "mangue", "poire", "pomme"]
>>> fruits == sorted(fruits)  # le tableau est bien trié
True
>>> indice(fruits, "kiwi")
1
>>> indice(fruits, "cerise") is None
True

On garantit que le tableau passé en paramètre a été au préalable trié.

###(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:p(40ed3;N 1o5_n)h]ù6,qc[yCuvi2+Dxms7=wlSatf-9ORrg.éPkb8/050h0g0R0Q0E0O0K0l0y0O0Q0K0K0M010R0E0c010406050K0C0J0J0Q0X0A040P0n0O0C0}0n0q0l020Q0J0c0j0l0W0g170X0x0C0g0K050)1416181a120c041y1F051I0)1I1K1F120h0E0D0=0@0_0{0s0E0Y0s0O1Y0s0R10050-0%0O0g1T0^0`011X1Z1#1Z0R1+1-1)0R0%0n0h1a1*0X1G0R0s0=1d0K0c0Q0q0{0F011/1V010S0/0g0q1l0g1)2a2c2h1;2k1-2n0J2p040a0l0#0X0n0c0n0K0E1g1i0+280X0X0g0y2K1y2r0q1G0)262W0R2423250h2t0{1#0q2m2H1)1Q1S0?1:2*0E2,0q201R1)0c2P1G2U2W31132b1i2=2i2`0X170O100l0m2T3511342s371;393b3d0F3g2c3i2U2)013n0Q3c040l0i3r2V123u3l0{3x3z0l0e3D3t353v3J3d0o3N3F3P3H3w0n3a3y3d0v3U3j361U3m3Z3o3A0L3(3G3+3I3-3#3A0(3;3W3?3Y3!3K0U3|3k3~3R040m0f433*2?3 3.0m3f1z3h3V444c460m3q4h3s4j4b383^3z0m3C4p3E3)3Q4u100m3M4y2W2~0g2W2:2Z0h2%3v0y202z0*1R1G4I303h3N054Q0+4X4k2i0$100+0S4Z3=4c0N3d4.3}4l0S102^1Q0y0g0p2P0y0C0X2I0D0g4?4(1;0 040d574s3m100D3y0g521x4G4A3X5a0w3N0l5n45100y0E1,565m4/2i5p5r5t4l4+0g0%1f5d3v5D4G5s5B5f042k0q5L5o100r0b3U0l5#5P4@4)4`4-5O5F385H5J0R5E5Q0{0n10020Y0R0j5=5(5R5T5V3~5a5Z4G065$685%580{4*042P0R525U5,5?010$0y100k1h5z31675$5-5R0J0/0E5j5~6b015^040M6B5e0{5a5c5A5 3I5/5K6j6N6D100G6H3Q10616M6C5a0r6W3X6E0)0)6(3~6x104o6s686v6c5*6-5G045h1-5k624c5a0z705.046x1#6A6!6I015a0t6`2i6E5`5|7f5R5w5y745910656=695#6@6l106f6h7k6O044{0E4}4 2Q5k1R6r4Y6k6K7o7B6}5j537O7c105q6R6C0q5v5x1-7T5N316a7b7Z040+5:7%7V7A3w10776z0C7=6E0T7=6/477:046%666?6k6d0g1#5+7)7v7,7Q6 7a5M10738g3X7,7^79337M107e7X7b7h0O7j8t6X047m7$8k637q5!7t7*3v6d7y0X6i8b6k7,7D7F507I55816L8p6S8d5i8f8Y6#7;8y8l7!7n8D718)8O8Z7@6y8o3h8I6)6U7~0E4D817W8;7Y6Y2^81837s7u8610880K7K3s7v648G7t7v8K0,7z8*5u768@7`66064r8J5H8a7L6S4;3A7T0q4_7C0q4|9e2V9g108X9z936|8#7S8.5C8:8_8c8,8C8%7b6$7r4i856S9l6g8M7=8Q9H7E4~8T537J8W9D5g9R5l9!8h04919W8P9Y9J4%9#9V3s8`6.8~04499T7pa09.0%102w9_af7P9|967{107}9o4c7 4g9~5W823(0)4#4J1H2 1y4L1y0R4NaJ2#2X1 212Z0Q5y4K4U1Ea63v2P0J0p0S0Q0$4~0s0i101q1s1u1w0l9%9f1L3i1F0H2c0;4}0R0l0g0I0g0X5w4}0K0w0l1h0l500sb20ybc0l0@0=7#1.0ha{0l0C1i2^0Rb26}1-aa4c182J0s17br0I10090d0z7.1fb75T0t09973hb70Q550ybv2ibx26bAb0bD0dbH0RbM5r0,bT1;bVbz0QbBbZ5Tb%5O2^0?0C0K0Z1Ha^040V1i0Q520.a~0c0C0lc10_0Eba0!3y0E9d0Xbg0Qba2Qbcb3bfbl0q0;0O000qbr0Xbt1.7vb,bXbC04bEbG5IbI0l5T0zb=31b70n0ub*0{czb.bYcC0db;bNa91wa~b0b^b`b|1P1R3v1?1!1$1(aX3X2v2m2o102B0P0y0X0~a~0#0A261h4Z4W3)324YaDc:3~6d4,7T9B5san3w9F8R9=7H9@8Vdg7Ndg8!6~9Say8Eahau758Ba59Ldw927+6P5;doa82VcP7?5S95dH82a=3E9)6C6d0E9ya99X7-cFdGdD3v7h5{0j6Gdx60dNdu8/04dQ118HdK9+9nd$3X6m6o6q9idK8m9rar6F7=dpd/75b#e46Vd,7B6Ze8agcXdJ7v6*6,ed017 6;9(6u9a7CdWeja39Qds9}9Oa7048jeg7B8n9seF7U048sd{3~d(8xeN6{dz81d=6t9jet8L8Na28=9G9I7G51dmdA8q5b9`ey7ReA9fe-a1dXexeTdOe^ewe$eae|9.8?78eIeB9 eid?es9*9b89f2e:8$f6azeEfh9peH81eMe#6C8veQfpdE8AbjeUe0dS7bd_9-en9/e(9?54e,6Se7fk6{8edtfL9UdCft8ze{eJ7(fS8+9qf4eb8}8 f1fD94e!e?fJ5Xe09kfc9dfx848Hf:6e9mfCeR75fm9tf_dcdgde9Ddi9:4}ameJdre;90fefUfPeheVfz9wf`9,f+e~9Pdje)8UfI8(e.dq9{ezgdf)fv8-fVdI9C6k7 aegDfRe_8Zaj04aldO9Nf,9PfNe=9Ke-0rf812aC4R4HaG0)4LaW0Bb)bqbs3ybubQ2Qch0l1 8M1.140c0!c|7R1.c#1eh10Ka~1f6y0K0!0lcocqa:132!1h0Y040K1#b52Thg0qhia;c(4T2;3~c,1^1%2q6Sc=2x2zc_c{c}2Cd00sd25md4335md8ek5_d)7i0jhTfe0S0X0C2JgVgF6S6Ed+f}agfjgS7b0K2f0401aSc|4Q1(gzh*0{h/106l0E0N8~h`fX3~h}h;17hp1v01i3gL6Ci67c0n0E2Pibf(h{01if2G162pfn5r9v8{04hTixd)hWhYh!81h,gW6Sawf?eJ7 3TdOfo4qdBiEd94cif0$i0i2ili4iSh:eo2c0Yiaicgoh.i!2GiiiriXidi+h~ip2yikgJiN4z6kePhUhSizgAhXhZ0Rh#iP7TgHiIgg0{7 4xi`4a9 iQ7vifh?7E0nh_i:i*3viTiVi_jbeKe}h$iei!i8i%i/jf661yhP1Lg(g*aH0,0.0:04.

Dans cette version, la fonction indice_recursive est définie à l'intérieur de la fonction indice.

###(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:pbv(40i2+edm3;sN7= 1o5w_lSnatf-)9h]6,crg[yPku8/050m0l0E0D0i0A0q0u0N0A0D0q0q0t010E0i0c010406050q0U0n0n0D0O0R040B0w0A0U0;0w0C050W0{0}0 110_0c041a1h051k0W1k1m1h0_0m0i0e0)0+0-0/0J0i0P0J0A1A0J0E0@050!0d0A0l1v0,0.011z1B1D1B0E1J1L1H0E0d0w0m111I0O1i0E0J0)140q0c0D0C0/0j011N1x010F0$0l0C0D0n0l1H1/1;1_1P1|1L1 210@0a0u0S0O0w0c0w0q0i170C0u0Y1-0O0O0l0N2m1a240C1i0W1+2z0E1)1(1*0m260/1D0C1~2j1H1s1u0*1O2J0i2L0C1#1t1H0c2s1i2x2z2%0`1:2n2R1`2W0O0~0A0@0u0v2w2+0^2*252-1P2/2;2?0j2_1;2{2x2I01300D2=040u0o342y0_372~0/3a3c0u0g3g362+383m2?0x3q3i3s3k390w2:3b2?0L3x2|2,1w2 3C313d0s3H3j3K3l3M3E3d0V3Q3z3S3B3D3n0I3Y2}3!3u040v0h3)3J2S3#3N0v2^1b2`3y3*3=3,0v333`353|3;2.3U3c0v3f423h3I3t470@0v3p4b2z2!0l2z2P2C0m2G380N1#221i4o1l2#3I2(2`054t0Y2$3Z3=0T0@0Y0F3q4d3A0y2?4N3R3~0F0@2U1s0N0l4S4H1`0?040f4#3}2.0@0e3b0l0U0O0q4+451P4(0M3q0u4O3+0@0N0i1K4!4j4 3=4(0H0b3x060u5e4~4T1`4J044L4^384Q3d5m3A0C4V044X0i4Z0z2s0N4=2k0e552)5h4`0@4*565G3l4.4:5B5q3!4{4}574-0452545Q580@4|4j5g4$2 4K0l0d165Z4%5#5T5L390@1|195K5)0/595b4j5d5f625U1P5j0i4M5%645M5k5,5.695?0w0@020P0E0p5=5|5@045_5/5H045 2%61626y5(4,650@2s0E4=5`2%6A4_0/0T0N0@0r185E3{6z5e6a6p0n0$0i4;6n6B0/6h040t6#6K014(5J5F6o0C5+5-0E6+386(0k6_5r5^2U6s5}0@0H6}3!6(0W0W753=6X0@416w6T6J3866686I6V6=044/1L5P5{6$6-0@0Q716W6Y6!7s6,4(0K7a1`6(6j6l7F5*5W531L7x4(6v6S7g5f6V5j6E6G7K6b5v5x5z5B1t6R356V6.7x7n7p4;4?7P5;6f6;517N7*2y7,7@7l5?7n0Y6@7?045$807_046X1D7A887t6(0G7Z017c3-8574607g7V0@0l1D7k2`7h6~7o5O7=7B384(7w8B8x8b6Z0U857E7^8f6i0A7J8M6,7n5X7O8F5R0@7R437T7U5?7W0Z7Y8R3t4W0C4Y0l5y2t7(5D856/4C815N7q8A6:7t5S8+8x8U7|4G907 8v7m0@8H8d996g0@6|923!8k3_8 7C98358w506q708W5!048n7f6T8q048s0q957~6u3x8#6U8%6D8)0O6H9e899c8J606x9q4I9L6F9N8i7n7#8:7%4?7)8^7.8|7;4@9u5:869!7`5Y9:6t879P7t8k3/9_729=9i3~0d0@299+a06p7:7r9m8C738i8g8i9k8m3H0W4E4m1j4z0W4x2A4q1a2D2C1!1$2C0D544n1t2{ar0Z0#0%04.