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[3ù4.nx/R8p)0hCDv7c256g9Nf=buS-,_l(wOaPké;:ors1qmyd]i te+050Z0(0%0M0#0I0U0$0t0I0M0U0U0B010%0#0l010406050U0D0X0X0M0T0Y040E0S0I0D0}0S0g0$020M0X0l0Q0$0j0(170T0W0D0(0U050i1416181a120l041y1F051I0i1I1K1F120Z0#0r0=0@0_0{0o0#0x0o0I1Y0o0%10050-0C0I0(1T0^0`011X1Z1#1Z0%1+1-1)0%0C0S0Z1a1*0T1G0%0o0=1d0U0l0M0g0{0u011/1V010A0/0(0g1l0(1)2a2c2h1;2k1-2n0X2p040a0$0N0T0S0l0S0U0#1g1i0+280T0T0(0t2K1y2r0g1G0i262W0%2423250Z2t0{1#0g2m2H1)1Q1S0?1:2*0#2,0g201R1)0l2P1G2U2W31132b1i2=2i2`0T170I100$0V2T3511342s371;393b3d0u3g2c3i2U2)013n0M3c040$0c3r2V123u3l0{3x3z0$0e3D3t353v3J3d0v3N3F3P3H3w0S3a3y3d0w3U3j361U3m3Z3o3A0s3(3G3+3I3-3#3A0k3;3W3?3Y3!3K0y3|3k3~3R040V0n433*2?3 3.0V3f1z3h3V444c460V3q4h3s4j4b383^3z0V3C4p3E3)3Q4u100V3M4y2W2~0(2W2:2Z0Z2%3v0t202z0*1R1G4I303h3N054Q0+4X4k2i0O100+0A4Z3=4c0K3d4.3}4l0A102^1Q0t0(0H2P0t0D0T2I0r0(4?4(1;0 040J574s3m100r3y0(521x4G4A3X5a0G3N0$5n45100t0#1,565m4/2i5p5r5t4l4+0(0C1f5d3v5D4G5s5B5f042k0g5L5o100m0R3U0$5#5P4@4)4`4-5O5F385H5J0%5E5Q0{0S10020x0%0Q5=5(5R5T5V3~5a5Z4G065$685%580{4*042P0%525U5,5?010O0t100z1h5z31675$5-5R0X0/0#5j5~6b015^040B6B5e0{5a5c5A5 3I5/5K6j6N6D100)6H3Q10616M6C5a0m6W3X6E0i0i6(3~6x104o6s686v6c5*6-5G045h1-5k624c5a0b705.046x1#6A6!6I015a0!6`2i6E5`5|7f5R5w5y745910656=695#6@6l106f6h7k6O044{0#4}4 2Q5k1R6r4Y6k6K7o7B6}5j537O7c105q6R6C0g5v5x1-7T5N316a7b7Z040+5:7%7V7A3w10776z0D7=6E0F7=6/477:046%666?6k6d0(1#5+7)7v7,7Q6 7a5M10738g3X7,7^79337M107e7X7b7h0I7j8t6X047m7$8k637q5!7t7*3v6d7y0T6i8b6k7,7D7F507I55816L8p6S8d5i8f8Y6#7;8y8l7!7n8D718)8O8Z7@6y8o3h8I6)6U7~0#4D817W8;7Y6Y2^81837s7u8610880U7K3s7v648G7t7v8K0,7z8*5u768@7`66064r8J5H8a7L6S4;3A7T0g4_7C0g4|9e2V9g108X9z936|8#7S8.5C8:8_8c8,8C8%7b6$7r4i856S9l6g8M7=8Q9H7E4~8T537J8W9D5g9R5l9!8h04919W8P9Y9J4%9#9V3s8`6.8~04499T7pa09.0C102w9_af7P9|967{107}9o4c7 4g9~5W823(0i4#4J1H2 1y4L1y0%4NaJ2#2X1 212Z0M5y4K4U1Ea63v2P0X0H0A0M0O4~0o0c101q1s1u1w0$9%9f1L3i1F0q2c0;4}0%0$0(0h0(0T5w4}0U0G0$1h0$500ob20tbc0$0@0=7#1.0Za{0$0D1i2^0%b26}1-aa4c182J0o17br0h10090J0b7.1fb75T0!09973hb70M550tbv2ibx26bAb0bD0JbH0%bM5r0,bT1;bVbz0MbBbZ5Tb%5O2^0?0D0U0f1Ha^040L1i0M520.a~0l0D0$c10_0#ba0P3y0#9d0Tbg0Mba2Qbcb3bfbl0g0;0I000gbr0Tbt1.7vb,bXbC04bEbG5IbI0$5T0bb=31b70S0db*0{czb.bYcC0Jb;bNa91wa~b0b^b`b|1P1R3v1?1!1$1(aX3X2v2m2o102B0E0t0T0~a~0N0Y261h4Z4W3)324YaDc:3~6d4,7T9B5san3w9F8R9=7H9@8Vdg7Ndg8!6~9Say8Eahau758Ba59Ldw927+6P5;doa82VcP7?5S95dH82a=3E9)6C6d0#9ya99X7-cFdGdD3v7h5{0Q6Gdx60dNdu8/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-0mf812aC4R4HaG0i4LaW0pb)bqbs3ybubQ2Qch0$1 8M1.140l0Pc|7R1.c#1eh10Ua~1f6y0U0P0$cocqa:132!1h0x040U1#b52Thg0ghia;c(4T2;3~c,1^1%2q6Sc=2x2zc_c{c}2Cd00od25md4335md8ek5_d)7i0QhTfe0A0T0D2JgVgF6S6Ed+f}agfjgS7b0U2f0401aSc|4Q1(gzh*0{h/106l0#0K8~h`fX3~h}h;17hp1v01i3gL6Ci67c0S0#2Pibf(h{01if2G162pfn5r9v8{04hTixd)hWhYh!81h,gW6Sawf?eJ7 3TdOfo4qdBiEd94cif0Oi0i2ili4iSh:eo2c0xiaicgoh.i!2GiiiriXidi+h~ip2yikgJiN4z6kePhUhSizgAhXhZ0%h#iP7TgHiIgg0{7 4xi`4a9 iQ7vifh?7E0Sh_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

.128013buS-[,3_4l(wn/8p)aPk0;:hors1v7c256mgyd]i9eNft =+050M0Q0T0s0O0k0B0U0F0k0s0B0B0V010T0O0q010406050B0c0J0J0s0A0L040d0z0k0c0;0z0n050o0{0}0 110_0q041a1h051k0o1k1m1h0_0M0O0D0)0+0-0/0y0O0K0y0k1A0y0T0@050!0b0k0Q1v0,0.011z1B1D1B0T1J1L1H0T0b0z0M111I0A1i0T0y0)140B0q0s0n0/0G011N1x010S0$0Q0n0s0J0Q1H1/1;1_1P1|1L1 210@0a0U0t0A0z0q0z0B0O170n0U0Y1-0A0A0Q0F2m1a240n1i0o1+2z0T1)1(1*0M260/1D0n1~2j1H1s1u0*1O2J0O2L0n1#1t1H0q2s1i2x2z2%0`1:2n2R1`2W0A0~0k0@0U0C2w2+0^2*252-1P2/2;2?0G2_1;2{2x2I01300s2=040U0h342y0_372~0/3a3c0U0j3g362+383m2?0H3q3i3s3k390z2:3b2?0I3x2|2,1w2 3C313d0E3H3j3K3l3M3E3d0p3Q3z3S3B3D3n0P3Y2}3!3u040C0v3)3J2S3#3N0C2^1b2`3y3*3=3,0C333`353|3;2.3U3c0C3f423h3I3t470@0C3p4b2z2!0Q2z2P2C0M2G380F1#221i4o1l2#3I2(2`054t0Y2$3Z3=0u0@0Y0S3q4d3A0m2?4N3R3~0S0@2U1s0F0Q4S4H1`0?040l4#3}2.0@0D3b0Q0c0A0B4+451P4(0g3q0U4O3+0@0F0O1K4!4j4 3=4(0r0x3x060U5e4~4T1`4J044L4^384Q3d5m3A0n4V044X0O4Z0i2s0F4=2k0D552)5h4`0@4*565G3l4.4:5B5q3!4{4}574-0452545Q580@4|4j5g4$2 4K0Q0b165Z4%5#5T5L390@1|195K5)0/595b4j5d5f625U1P5j0O4M5%645M5k5,5.695?0z0@020K0T0w5=5|5@045_5/5H045 2%61626y5(4,650@2s0T4=5`2%6A4_0/0u0F0@0R185E3{6z5e6a6p0J0$0O4;6n6B0/6h040V6#6K014(5J5F6o0n5+5-0T6+386(0W6_5r5^2U6s5}0@0r6}3!6(0o0o753=6X0@416w6T6J3866686I6V6=044/1L5P5{6$6-0@0f716W6Y6!7s6,4(0N7a1`6(6j6l7F5*5W531L7x4(6v6S7g5f6V5j6E6G7K6b5v5x5z5B1t6R356V6.7x7n7p4;4?7P5;6f6;517N7*2y7,7@7l5?7n0Y6@7?045$807_046X1D7A887t6(0e7Z017c3-8574607g7V0@0Q1D7k2`7h6~7o5O7=7B384(7w8B8x8b6Z0c857E7^8f6i0k7J8M6,7n5X7O8F5R0@7R437T7U5?7W0Z7Y8R3t4W0n4Y0Q5y2t7(5D856/4C815N7q8A6:7t5S8+8x8U7|4G907 8v7m0@8H8d996g0@6|923!8k3_8 7C98358w506q708W5!048n7f6T8q048s0B957~6u3x8#6U8%6D8)0A6H9e899c8J606x9q4I9L6F9N8i7n7#8:7%4?7)8^7.8|7;4@9u5:869!7`5Y9:6t879P7t8k3/9_729=9i3~0b0@299+a06p7:7r9m8C738i8g8i9k8m3H0o4E4m1j4z0o4x2A4q1a2D2C1!1$2C0s544n1t2{ar0Z0#0%04.