Vous êtes sur la page 1sur 2

Exercice 1 (Compréhensions de listes - 2 points)

Quelles sont les listes construites par chacune des expressions suivantes ?
1 [ car if car in ’ aeiouy ’ else ’_ ’ for car in ’ Abricot ’]
2 [( i , j ) for i in [1 , 4 , 8] for j in [3 , 2 , 6]]
3 [i + j for i in range (10) for j in [1 , 2 , 4] if i < j ]
4 [( i , j ) for i in range (0 , 4) for j in range (i , i +4) if ( i + j ) % 2 == 0]

Exercice 2 (Comprendre et analyser un code en Python - 2 points)


On considère la fonction foo dont la définition est donnée ci-dessous.
1 def foo ( lis ):
2 """ Mystere """
3 n = len ( lis )
4 for i in range ( n ):
5 if i %2 == 0 and i < n -1 :
6 tmp = lis [ i ]
7 lis [ i ] = lis [ i +1]
8 lis [ i +1] = tmp
9 return lis

1. Que retourne foo([1,2,3,4,5]) ?

2. Expliquer ce que fait cette fonction, et donner sa signature

Exercice 3 (Ecrire des fonctions en Python - 11 points)


Dans cet exercice, nous allons considérer des listes de chaînes de caractères.

Pour chaque question, il vous est possible d’utiliser les fonctions qui sont l’objet des questions
précédentes, même si vous n’avez pas répondu à ces questions.

La chaine de documentation (y compris la signature) de chaque fonction sera notée, n’oubliez


donc pas de la préciser pour chaque fonction !

1. Définir la fonction begaie(lis) qui, étant donné une liste lis, retourne la liste obtenue en
bégayant lis, c’est à dire la liste dans laquelle chacun des éléments de lis est répété deux fois.
>>> begaie ([])
[]
>>> begaie ([ ’a ’ , ’a ’ , ’b ’ , ’c ’ ])
[ ’a ’ , ’a ’ , ’a ’ , ’a ’ , ’b ’ , ’b ’ , ’c ’ , ’c ’]

Page 2 sur 4
Algorithmique et Programmation 1
CC Final – 6/01/2022

2. Définir la fonction debegaie(lis) qui, étant donné une liste lis, retourne la liste obtenue
en débégayant lis, c’est à dire la liste qui ne contient qu’une seule copie de chaque éléments
identiques consécutifs.
>>> debegaie ([])
[]
>>> debegaie ([ ’a ’ , ’a ’ , ’b ’ , ’c ’ , ’c ’ , ’c ’ , ’d ’ ])
[ ’a ’ , ’b ’ , ’c ’ , ’d ’]

3. Définir la fonction prem_nb_occ(lis) qui, étant donné une liste lis non vide, retourne le
couple (elem, nb_occ), où elem est le premier élément de la liste et nb_occ est le nombre de
fois que cet élément apparaît au début de la liste.
>>> prem_nb_occ ([ ’a ’ , ’b ’ , ’a ’ ])
( ’a ’ , 1)
>>> prem_nb_occ ([ ’b ’ , ’b ’ , ’b ’ , ’a ’ , ’c ’ , ’b ’ ])
( ’b ’ , 3)
>>> prem_nb_occ ([ ’d ’ , ’d ’ , ’d ’ , ’d ’ ])
( ’d ’ , 4)

4. Définir la fonction compacte(lis) qui, étant donné une liste lis, retourne une liste qui contient
des couples (elem, nb_occ) pour chaque valeurs identiques consécutives de lis.
>>> compacte ([ ’b ’ , ’b ’ , ’b ’ , ’a ’ , ’c ’ , ’b ’ ])
[( ’b ’ , 3) , ( ’a ’ , 1) , ( ’c ’ , 1) , ( ’b ’ , 1)]
>>> compacte ([ ’a ’ , ’b ’ , ’a ’ ])
[( ’a ’ , 1) , ( ’b ’ , 1) , ( ’a ’ , 1)]
>>> compacte ([ ’d ’ , ’d ’ , ’d ’ , ’d ’ ])
[( ’d ’ , 4)]
>>> compacte ([])
[]

5. Définir la fonction decompacte(lis) qui, étant donné une liste de couples telle que construite
avec la fonction compacte, retourne la liste décompactée, c’est à dire la liste où chaque couple
(elem, nb_occ) est remplacé par une sous-suite de nb occurrences de elem.
>>> decompacte ([( ’b ’ , 3) , ( ’a ’ , 1) , ( ’c ’ , 1) , ( ’b ’ , 1)])
[ ’b ’ , ’b ’ , ’b ’ , ’a ’ , ’c ’ , ’b ’]
>>> decompacte ([( ’a ’ , 1) , ( ’b ’ , 1) , ( ’a ’ , 1)])
[ ’a ’ , ’b ’ , ’a ’]
>>> decompacte ([( ’d ’ , 4)])
[ ’d ’ , ’d ’ , ’d ’ , ’d ’]
>>> decompacte ([])
[]

Page 3 sur 4

Vous aimerez peut-être aussi