Exercice (calcul dans une séquence)
Dans cet exercice, L désigne une liste de nombres entiers ou flottants (ou même complexes).
Écrire somme(L et produit(L) renvoyant la somme (resp. le produit) des éléments de L.
Si L est vide, on convient que la somme vaut 0 et que son produit vaut 1.
Écrire cumuls(L) qui renvoie la liste des cumuls successifs des éléments de L.
Par exemple cumuls([2,4,3,5]) doit renvoyer la liste [2,6,9,14]).
Écrire decumuls(L) qui renvoie la list L’ dont L est la somme des cumuls.
Par exemple decumuls([2,6,9,14]) doit renvoyer la liste 2,4,3,5].
Réécrire les fonctions cumuls2 et decumuls2 pour qu’elles réalisent les calculs sur place (donc la liste placée en argument est modifiée) et qu’elles ne revoient rien (qu’elles renvoient None).
Exercice (comparaisons dans une séquence)
Dans cette question, seq désigne une séquence (une liste ou une chaîne de caractères) non vide.
Si c’est une liste, ses éléments sont supposées comparables entre eux (par exemples des entiers ou des flottants).
Écrire minimum(seq) et maximum(seq) renvoyant le plus petit (resp. le plus grand) élément de seq.
Écrire pposmax(seq) et dposmax(seq) renvoyant la première position (resp. la dernière) du maximum de seq.
Écrire listposmax(seq) renvoyant la liste des positions du maximum de seq.
Exercice (monotonie dans une séquence)
Dans cette question, seq désigne une séquence (une liste ou une chaîne de caractères) non vide.
Si c’est une liste, ses éléments sont supposées comparables entre eux (par exemples des entiers ou des flottants).
Écrire croissant(seq) qui teste si une séquence est croissante (au sens large).
Écrire montagne(seq) qui teste si une séquence est strictement croissante puis strictement décroissante. L’expression montagne(seq) doit renvoyer la position du pic (et −1 sinon).
On dit qu’une séquence seq (de longueur {n\ge3}) est en zigzag si ses éléments successifs {a, b, c, d, f, \ldots} vérifient {a\lt b,\; b\gt c,\;c\lt d,\; d\gt e,\;\ldots} ou alors {a\gt b,\;b\lt c,\;c\gt d,\; d\lt e,\;\ldots}
Écrire zigzag(seq) envoyant True si seq est en zigzag, et False sinon.
Exercice (recherches dans une séquence)
Dans cet exercice, seq désigne une séquence (une liste ou une chaîne de caractères) non vide, et elt désigne un élément susceptible de figurer (ou pas) dans la séquence seq.
Écrire element(elt,seq) qui teste si elt apparaît dans seq.
Écrire une fonction position(elt,seq) renvoyant la position de la première occurence de elt dans seq (et renvoyant −1 si l’élément n’a pas été trouvé).
On suppose maintenant que la séquence seq est triée dans l’ordre croissant.
Écrire une nouvelle version de position(elt,seq) qui exploite cette hypothèse sur seq.
NB : on peut imaginer deux solutions, la première assez simple (modification mineure de la fonction précédente) et la deuxième (beaucoup plus efficace) qui procède par une recherche dichotomique.
Exercice (sous-séquences)
Une séquence non vide s est un segment d’une séquence seq si elle est formée d’éléments consécutifs de seq. Comme on le voit ici, le mot réservé in permet encore de le vérifier pour les chaînes de caractères, mais ça ne marche pas pour les listes :
1
2
3
4
>>>'zer'in'azerty'
True
>>>[2,3]in[1,2,3,4,5]
False
Écrire une fonction segment(s,seq) qui renvoie True si s est un segment de seq, et False sinon.
Écrire une fonction segments(seq) renvoyant l’ensemble de tous les segments de seq. La fonction segments pourra recevoir deux arguments supplémentaires : mini et maxi donnant respectivement les longueurs minimum et maximum des sous-séquences (par défaut 1 et len(seq)).
Écrire occurences(s’,seq) qui renvoie le nombre de fois que s’ apparaît comme un segment de seq (par exemple ’aba’ apparaît trois fois dans ’aabababa’).
On dit que s est une séquence extraite de seq si s est vide ou formée d’éléments de seq dans l’ordre croissant (mais pas nécessairement consécutifs).
Par exemple ‘aey’ est une séquence extraite (mais elle n’est pas un segment) de la chaîne ‘azerty’.
Écrire extrait(s’,seq) renvoyant True si s’ est extraite de seq, et False sinon.