In [1]:
def milieu(i, j):
    """
    i -- entier
    j -- entier

    renvoie le milieu entier de [i,j]
    """
    return (i+j)//2
In [2]:
def dichotomieIllustree(valeur, tab):
    """
    tab -- liste d'entiers, triée en ordre croissant
    valeur -- entier

    renvoie True si valeur est dans tab, False sinon.
    La recherche est faite suivant le principe de dichotomie.
    """
    copie = [x for x in tab]
    
    while copie != []:
        print("*"*30)
        print(f"Je cherche {valeur} dans la liste {copie}.")
        centre = milieu(0, len(copie)-1)
        if copie[centre] == valeur: 
            print(f"L'élément d'indice {centre} est égal à {valeur}.")
            return True
        if copie[centre] < valeur:
            print(f"L'élément d'indice {centre} a pour valeur {copie[centre]} < {valeur}.")
            copie = [copie[k] for k in range(centre+1, len(copie))]
        else:
            print(f"L'élément d'indice {centre} a pour valeur {copie[centre]} > {valeur}.")
            copie = [copie[k] for k in range(0, centre)]
    return False
In [3]:
L = [2, 5, 6, 7, 8, 9, 10, 12]
dichotomieIllustree(8, L)
******************************
Je cherche 8 dans la liste [2, 5, 6, 7, 8, 9, 10, 12].
L'élément d'indice 3 a pour valeur 7 < 8.
******************************
Je cherche 8 dans la liste [8, 9, 10, 12].
L'élément d'indice 1 a pour valeur 9 > 8.
******************************
Je cherche 8 dans la liste [8].
L'élément d'indice 0 est égal à 8.
Out[3]:
True
In [4]:
L = [-5, -2, 2, 5, 6, 7, 9, 10, 12, 14, 21, 23, 42]
dichotomieIllustree(8, L)
******************************
Je cherche 8 dans la liste [-5, -2, 2, 5, 6, 7, 9, 10, 12, 14, 21, 23, 42].
L'élément d'indice 6 a pour valeur 9 > 8.
******************************
Je cherche 8 dans la liste [-5, -2, 2, 5, 6, 7].
L'élément d'indice 2 a pour valeur 2 < 8.
******************************
Je cherche 8 dans la liste [5, 6, 7].
L'élément d'indice 1 a pour valeur 6 < 8.
******************************
Je cherche 8 dans la liste [7].
L'élément d'indice 0 a pour valeur 7 < 8.
Out[4]:
False
In [ ]: