Vous êtes sur la page 1sur 2

ENSA Khouribga 24/11/2021 Programmation Python

Examen Écrit
Durée : 1h30

Exercice 1 :
1. (1/2 point) Pour convertir une variable (appelée : val) en chaine de caractères, on utilise l’instruction :
⃝ str(val) ⃝ float(val) ⃝ String(val) ⃝ Char(val)

2. (1 point) On considère le code suivant


lettre = [ ’a ’ , ’b ’ , ’c ’]
nums = list ( range (0 , 5 ) )
total = [ ]
drapeau = True
for i in range (0 , 3 ) :
total . append ( lettre [ i ] if drapeau else nums [ i ] )
drapeau = ! drapeau

⃝ total = [’a’, 1, ’c’] ⃝ total=[1,’b’, 2] ⃝ total=[’a’,’b’,’c’]


3. (1/2 point) Que retourne l’instruction :
"a ,b ,c , d " . split ( ’ , ’)

⃝ [’a’,’b’,’c’,’d’] ⃝ (’a’,’b’,’c’,’d’) ⃝ {’a’,’b’,’c’,’d’}


4. (1 point) Supposons qu’on a un dictionnaire :
D = { ’ Hamza ’ : 10 , ’ Karim ’: 5 , ’ Safaa ’: 6 , ’ Nawal ’: 12 }

Quelle instruction permet de retourner la liste des noms trier selon leur valeurs (càd : [’Karim’,’Safaa’,’Hamza’,
,’Nawal’ ]) :
⃝ [k for v,k in sorted(D.items())]
⃝ [k for v,k in sorted([(v,k) for k,v in D.items()])]
⃝ [k for k,v in sorted(D.items())]
5. (1 point) Comment faire une copie correcte d’une liste l1=[[1], [1,2], [1,2,3]] dans une autre l2 ? choisir la
bonne instruction :
⃝ l2=l1 ⃝ l2=list(l1) ⃝ l2=l1[ :] ⃝ l2=l1.copy()

Exercice 2 :
1. (1 point) Écrire une fonction qui retourne la fréquence de chaque lettre d’un mot. Le résultat sera un
dictionnaire dont les clés seront les lettres et les valeurs seront les fréquences. La fréquence désigne le
nombre d’occurrence d’une lettre.
2. (1 point) Écrire une fonction qui retourne la somme des éléments de cette liste entre les positions i et j exclu
sans utiliser la fonction sum. Après la définition, tester la fonction sur une liste de votre choix contenant
des nombres positifs et négatifs.
3. (2 points) en se basant sur la question précédente. Trouver la sous-liste li[i : j] dont la somme des éléments
est la plus grande. Elle inclura deux boucles.
4. (1 point) On calcule la suite de Fibonacci comme suit :
n = 100
fibo = [ 0 ] * ( n + 1 ) # A
fibo [ 0 ] = 1
for i in range (2 , n ) : # B
fibo [ i ] = fibo [ i - 1 ] + fibo [ i - 2 ] # C
print ( fibo [ n ] ) # affiche zero

Malheureusement, le résultat affiché est nul. Corriger le problème sachant que l’erreur est située à une des
trois lignes A,B,C.
5. (2 points) Réécrire la fonction u ci-dessous de façon à ce qu’elle ne soit plus récursive.
def u ( n ) :
if n < = 2 : return 1
return u ( n - 1 ) + u ( n - 2 ) + u ( n - 3 )
ENSA Khouribga 24/11/2021 Programmation Python

6. (1.5 points) On considère deux listes d’entiers. La première est inférieure à la seconde si l’une des deux
conditions suivantes est vérifiée :
- les n premiers nombres sont égaux mais la première liste ne contient que n éléments tandis que la seconde
est plus longue
- les n premiers nombres sont égaux mais que le n + 1ème de la première liste est inférieur au n + 1ème de
la seconde liste
Par conséquent, si ℓ est la longueur de la liste la plus courte, comparer ces deux listes d’entiers revient à
parcourir tous les indices depuis 0 jusqu’à ℓ exclu et à s’arrêter sur la première différence qui détermine le
résultat. S’il n’y pas de différence, alors la liste la plus courte est la première. Il faut écrire une fonction
compare_liste(p, q) qui implémente cet algorithme.
7. (2 points) Écrire de deux façons différentes la fonction envers qui prend en argument une chaine de caractère
et retourne la chaine a l’envers.
8. (1 point) Définir la matrice M ci-dessous en utilisant le module numpy puis en extraire la matrice M1
 
1 5 9 13 17  
 2 6 10 14 18  6 18 10
M =  3 7 11 15 19 
 M1 =  7 19 11 
5 17 9
4 8 12 16 20

Remplacer tous les éléments de la diagonale de M1 par des 1. Est ce que la matrice M sera affectée par ce
changement ?
9. (1/2 point) Changer la forme de la matrice M pour pouvoir faire une concaténation de M avec M1 selon les
colonnes.

Exercice 3 :
1. (4 points) Dans ce problème, on vous donne une disposition de clavier virtuel et votre tâche consiste à
déterminer le minimum nombre de coups nécessaires pour taper un texte donné. Les touches sont disposées
dans une grille rectangulaire, de telle sorte que chaque touche virtuelle occupe une ou plusieurs carrés
unitaires connectés de la grille. Le curseur démarre dans le coin supérieur gauche du clavier et se déplace
dans les quatre directions cardinales, de telle sorte qu’il passe toujours au carré unité suivant dans cette
direction qui appartient à une clé différente. S’il n’y a pas de telle case unité, le curseur ne bouge pas.

La figure montre une manière possible de taper CONTEST en utilisant 30 coups sur le clavier virtuel
considéré. Les points rouges représentent les touches virtuelles où le bouton SEL de sélection a été taper.
Implémenter un sous programme qui prend en argument une chaine de caractère chaine et retourne le
minimum de nombre de coups nécessaire pour déplacer le curseur sur le clavier virtuel afin d’écrire cette
chaine.

Page 2

Vous aimerez peut-être aussi