É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$
def recherche1(L, x):
for elt in L:
if elt == x:
return True
return False
Même question mais avec une boucle while
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
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$.
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 :
Le motif $s$ apparaît deux fois dans $L$ donc la fonction $rechercheMotif$ renvoie True
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
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)