M1 - Python - Session de juin 2025¶

Exercice 1¶

Les fonctions suivantes sont à écrire en une ligne. On pourra préalablement importer un ou plusieurs modules.

  1. Ecrire une fonction qui prend en entrée une liste et renvoie une liste de couples (x,n) où n est le nombre d'entrées consécutives égales à x.
>>> ll = [2,2,2,2,1,1,2,2,1,1,1,4,4,4,4,2]
>>> f(ll)
[(2, 4), (1, 2), (2, 2), (1, 3), (4, 4), (2, 1)]
  1. Ecrire une fonction qui prend en entréee une liste d'entiers et renvoie la liste réarrangée de manière à ce que les entiers impairs soient au début, et les pairs à la fin, en respectant leur ordre initial.
>>> mm = [38, 25, 36, 36, 40, 22, 8, 26, 32, 1, 7, 31, 46, 10, 21, 41, 47, 23, 24, 22, 5, 42, 41, 24, 36, 20, 27, 46, 6, 25]
>>> g(mm)
[25, 1, 7, 31, 21, 41, 47, 23, 5, 41, 27, 25, 38, 36, 36, 40, 22, 8, 26, 32, 46, 10, 24, 22, 42, 24, 36, 20, 46, 6]
  1. Ecrire une fonction is_stricly_increasing qui teste si une liste est strictement croissante.

On donnera deux versions, une itérative et une récursive.

>>> is_stricly_increasing([1,3,5,5,8,9,9])
False
>>> is_strictly_increasing_rec([2,4,5,9,15,18,25,51])
True

Exercice 2¶

Le slug d'une chaîne de caractères s est la chaîne obtenue en replaçant dans s tous les blocs de caractères spéciaux (non alphanumériques) par un seul tiret. On les utilise pour transformer des titres en urls. Ecrire une fonction make_slug(s) transformant une chaîne quelconque en slug (on pourra utiliser re) :

s = '  ga bu ** -- zo meu !!  666'
make_slug(s)
'ga-bu-zo-meu-666'
In [ ]:
import re
def make_slug(s):
    # votre code ici (2 lignes)
    pass
In [2]:
make_slug('@toto ??  bla & blu {}')
Out[2]:
'toto-bla-blu'

Exercice 3¶

La suite de Robinson est une suite de mots $w_n$ sur l’alphabet $\{0, 1, . . . , 9\}$ définie récusivement par $w_0 = 0$, et chaque terme de la suite se construit ensuite en comptant le nombre d’apparitions des différents chiffres de 9 à 0 (dans cet ordre !) dans le terme précédent. Si un chiffre n’apparaît pas, il n’est pas pris en compte.

Les premiers termes sont donc 0, 10, 1110, 3110, 132110, 13122110, 23124110, 1413223110...

Écrire une fonction suivant(w) qui calcule $w_n$ à partir de $w_{n−1}$, puis une fonction robinson(n) qui renvoie le $n$ième terme de la suite en utilisant un cache. Par exemple

>> suivant(’1423224110’)
’2413323110’

Exercice 4¶

Écrire une fonction list_hidden qui renvoie la liste des fichiers et des répertoires cachés contenus dans une arborescence Linux (on considérera qu'un élément caché est un élément dont le nom commence par un point).

Pour tester, exécuter la commande

mkdir test && touch test/1 test/.2 && mkdir test/a && touch test/a/3 && touch test/a/.4 && mkdir test/.b
In [9]:
list_hidden('./test')
Out[9]:
['./test/.2', './test/.b/', './test/a/.4']
In [ ]: