Écrire une fonction $recherche(L, x)$ qui possède deux paramètres, une liste $L$ de valeurs entières, un entier $x$ et qui renvoie True si $x\in L$

In [ ]:
def recherche1(L, x):
    for elt in L:
        if elt == x:
            return True
    return False

Même question mais avec une boucle while

In [ ]:
def recherche2(L, x):
    compt = 0
    fin = len(L)
    while compt < fin:
        if L[compt] == x:
            return True
        compt += 1
    return false

Un autre code qui fonctionne tout aussi bien

In [ ]:
def recherche3(L, x):
    compt = 0
    fin = len(L)
    while compt < fin and L[compt] != x:
        compt += 1
    if compt < fin:
        return True
    return false

Écrire une fonction $occurences(L, x)$ qui possède deux paramètres, une liste $L$ de valeurs entières, un entier $x$ et qui renvoie les indices de position de toutes les occurences de $x$ dans $L$.

In [ ]:
def occurences(L, x):
    indices = []
    fin = len(L)
    for i in range(fin):
        if L[i] == x:
            indices.append(i)
    return indices

Écrire une fonction $rechercheMotif(L, s)$ qui accepte en paramètres une liste de valeurs constituée de $0$ et $1$, une liste d'un motif constitué de $0$ et $1$ et qui renvoie True si le motif appartient à la liste $L$.

Exemple :

  • $L = [0, 1, 1, 0, 0, 1, 0, 1]$
  • $s = [1,0]$

Le motif $s$ apparaît deux fois dans $L$ donc la fonction $rechercheMotif$ renvoie True

In [ ]:
def rechercheMotif(L, s):
    fin_L, fin_s = len(L), len(s)        # longueur des deux listes
    ind_L, ind_s = 0, 0                  # indices servant à parcourir les listes
    if fin_s > fin_L:
        return False
    while ind_L < (fin_L - fin_s + 1):
        if ind_s == fin_s:               # c'est qu'on est au bout du motif s
            return True                  # 
        if L[ind_L + ind_s] == s[ind_s]:
            ind_s += 1
        else:
            ind_s = 0                    # on repart au début du motif s 
            ind_L += 1                   # et on passe à la valeur suivante dans L
    return False
In [ ]:
from random import randint
L = [randint(0, 1) for i in range(20)]
s = [randint(0, 1) for i in range(3)]
print("L ",L)
print
print("s ", s)
rechercheMotif(L, s)