Lycée La Prat’s Oraux Blancs Python
Planche 5 (2015, ENSAM Python — Mimard)
On dit qu’un mot est un palindrome si il est le même lorsqu’on le lit à l’envers. Par exemple le mot "radar"
est un palindrome. Le mot "nul" donne "lun" à l’envers et n’est pas un palindrome.
1) Écrire une fonction inverse d’argument une chaîne de caractères mot et renvoyant la chaîne écrite à
l’envers.
2) Écrire une fonction palindrome d’argument une chaine de caractères mot et qui renvoie le booléen
True si le mot est est un palindrome et False sinon.
3) Par extension on dit qu’un nombre est un palindrome si il est égal au nombre obtenu en écrivant les
chiffres en ordre inverse.
Écrire une fonction palNombre, d’argument Net renvoyant la liste des nombres palindromes inférieur
ou égaux à N.
Exercice 1 (Décomposition en base 2)
1) Écrire une fonction récursive dec2bin de paramètre nentier qui renvoie la chaîne de caractère constitué
des chiffres de nen base 2.
2) Écrire une fonction récursive bin2dec de paramètre schaîne de caractère qui renvoie l’entier représenté
en base 2par s.
3) Écrire deux fonctions analogues aux précédente mais prenant en paramètre la base b.
Exercice 2 (Tri fusion)
1) Écrire une fonction qui fusionne deux listes déjà triées.
2) Écrire un algorithme de tri fusion, qui fait appel à la fonction précédente. On peut écrire un algorithme
récursif ou non récursif, au choix.
3) Faire afficher le contenu des variables à chaque étape.
4) Étudier la complexité en temps et en mémoire lorsque la longueur de la liste est une puissance de 2.
Exercice 3 (Autour du démineur)
On pourra utiliser la fonction rand de la sous-bibliothèque numpy.random. Chaque fonction doit être testée.
Dans tout ce TP, on appellera « grille » un tableau en Python (liste de listes ayant toutes la même longueur
ou tableau NumPy) constitué uniquement de 0 et de 1.
1) Écrire une commande Python permettant de créer rapidement une grille à nlignes et pcolonnes ne
contenant que des zéros.
2) Écrire une fonction Python qui prend comme argument une grille get qui ressort la proportion de 0
dans la grille.
3) Écrire une fonction Python qui prend comme arguments trois entiers n,pet ket qui créée une grille
ànlignes et pcolonnes avant d’y insérer knombres 1à des emplacements aléatoires, le reste étant
constitué de zéros.
4) Écrire une fonction Python prenant comme argument une grille et deux entiers iet j, et qui compte le
nombre de voisins de la case (i, j)(située sur la ligne iet la colonne j) contenant des 1(les voisins sont
toutes les cases adjacentes à la case (i, j), y compris en diagonale, ce qui fait un maximum possible de
huit voisins pour une case qui n’est pas sur un côté de la grille).
On pourra distinguer des cas pour les coins et les cases en bord de grille.
5) En déduire une fonction Python qui transforme une grille en un tableau de même taille contenant le
caractère M partout où la grille avait des 1, et le nombre de voisins contenant des mines (des 1dans
la grille initiale) sur les cases qui contenaient des 0.
6) Programmer un démineur.
Exercice 4 (Simulation de variables aléatoires)
On pourra utiliser la fonction rand de la sous-bibliothèque numpy.random. Chaque fonction doit être testée.
1) Écrire une fonction Xb d’argument p∈]0,1[ retournant 1avec probabilité pet 0avec probabilité 1−p.
2