Vous êtes sur la page 1sur 8

2022-2023 TP n° 3 (2 heures) Informatique

Tableaux : le type list


I Liste de chaînes de caractères
Q1 Écrire une fonction present(verbe) d’argument une chaîne de caractères verbe (un verbe
du premier groupe) qui affiche la table de conjuguaison du présent de l’indicatif de verbe.
Par exemple, present('chanter') doit provoquer l’affichage :

je chante
tu chantes
elle/il chante
nous chantons
vous chantez
elles/ils chantent

On pensera à introduire la liste des pronoms et la liste des terminaisons correspondantes.

II Exemple d’utilisation de bibliothèque : simulation de


lancers de dé
Certaines commandes ne sont disponibles qu’après le chargement d’une bibliothèque. Par exemple,
la commande randint est une commande de la bibliothèque random. L’instruction randint(a,b)
tire au hasard un entier compris entre deux entiers a et b (ces deux nombres étant inclus).
A la suite de la séquence d’instructions :

import random
x = random.randint(1, 6)

la variable x a pour valeur un entier pris au hasard entre 1 et 6 (tout deux inclus).
Q2 Écrire une séquence d’instructions qui simule 10 lancers de dé et qui compte le nombre de
6 obtenus.
Q3 Écrire une séquence d’instructions qui simule 100 lancers de dé et qui alimente un tableau
t, de type list, de longueur 6 de la façon suivante : t[0] est le nombre de 1 tombés, t[1]
est le nombre de 2 tombés, ... , t[5] est le nombre de 6 tombés.

III Parcours de tableaux de type list


Dans les fonctions suivantes, l’argument t est un tableau de type list, i.e. une liste de Python.
Q4 Écrire une fonction est_element(t,x) qui renvoie True si x est élément de t et False sinon.
La fonction s’applique-t-elle à un objet t de type tuple ? à un objet de type range(n) où
n est donné ? une chaîne de caractères ? Si tel n’est pas le cas, que faut-il faire pour que
cela fonctionne ?
Q5 Écrire une fonction nombre(t,x) qui renvoie le nombre d’occurrences de x dans t.
Q6 Écrire une fonction nombre_de_pairs(t) qui renvoie le nombre d’éléments de t qui sont
des entiers pairs.
Q7 Écrire une fonction somme_carres(t) de résultat la somme des carrés des éléments de t.
Q8 Écrire une fonction produit(t) de résultat le produit des éléments de t.

Lycée Michelet - CPGE 1re année 1


2022-2023 TP n° 3 (2 heures) Informatique

Q9 Écrire une fonction somme_pairs(t) de résultat la somme des éléments pairs de t.


(somme_pairs([3,5,8,12,2] doit renvoyer 22).
Q10 Écrire une fonction somme_indices_pairs(t) de résultat la somme des éléments de t dont
l’indice est pair (somme_indices_pairs([3,5,8,12,2] doit renvoyer 13).
Q11 Un palindrome est un mot ou un groupe de mots pouvant être lu indifféremment de droite
à gauche ou de gauche à droite, par exemple "Elu par cette crapule" (sans tenir compte des
espaces et des accents). Écrire une fonction palindrome(t) qui renvoie True si le tableau
t est un palindrome et False sinon (palindrome([1,2,3,2,1]) doit renvoyer True).
Faites un jeu de tests pour vérifier que votre fonction est correcte.
Q12 On souhaite écrire une fonction tous_positifs qui prend en entrée une liste de nombres
entiers et qui renvoie le booléen True si tous les termes de la liste sont strictement positifs
et booléen False sinon.
— Commencer par écrire une fonction utilisant une boucle for.
— Écrire une fonction utilisant une boucle while.
Q13 Écrire une fonction existe_positif qui prend en entrée une liste de nombres entiers et
qui renvoie le booléen True si la liste contient au moins un terme strictement positif, et
False sinon.

IV Construction de tableaux de type list


Q14 Écrire une fonction liste_entiers(n,p) renvoie la liste [n, n + 1, ..., p − 1].
Q15 Écrire une fonction liste_cubes(n) renvoie la liste [03 , 13 , ..., n3 ].
Q16 Écrire une fonction liste_entiers2(n,p,q) qui renvoie la liste des entiers compris entre
1 et n qui ne sont pas multiples des entiers non nuls p et q.
Par exemple, liste_entiers2(10,2,3) renvoie [1; 5; 7].
Q17 Liste des non-multiples
1. Écrire une fonction est_multiple(x,L) qui renvoie True si l’entier x est multiple d’au
moins un élément de L et False sinon.
Par exemple, est_multiple(17,[2,3,4]) renvoie False.
2. Écrire une fonction liste_entiers3(n,L) qui renvoie la liste des entiers compris entre 1
et n qui ne sont multiples d’aucun des éléments de L.
Par exemple, liste_entiers3(20,[2,3,7,17]) renvoie [1, 5, 11, 13, 19].
Q18 Pour un tableau t = [t0 , t1 , ..., tn−1 ], on définit la ie somme partielle de t par si = t0 + ... + ti .
1. Écrire une fonction sommes_partielle(t) dont le résultat est la liste des sommes partielles
de t.
Par exemple, sommes_partielles([2,3,4,-1]) renvoie [2, 5, 9, 8].
2. Écrire une fonction reciproque(s) qui renvoie la liste d’origine à partir de la liste s de ses
sommes partielles.
Par exemple, reciproque([2,5,9,8]) renvoie [2, 3, 4, −1].

Lycée Michelet - CPGE 1re année 2


2022-2023 TP n° 3 (2 heures) Informatique

Corrigé
Q1
31 def present ( verbe ) :
32 ''' Affiche la d é clinaison du verbe du 1 er groupe '''
33 pronom = [ ' je ' , ' tu ' , ' elle / il ' , ' nous ' , ' vous ' , ' elles / ils ']
34 suffixe = [ 'e ' , ' es ' , 'e ' , ' ons ' , ' ez ' , ' ent ']
35 prefixe = verbe [0: len ( verbe ) -2]
36 for k in range ( len ( pronom ) ) :
37 s = pronom [ k ] + ' ' + prefixe + suffixe [ k ]
38 print ( s )

Q2
40 import random
41
42 nombre_six = 0
43 for i in range (100) :
44 de = random . randint (1 ,6)
45 if de == 6:
46 nombre_six += 1
47

48 print ( nombre_six )

Q3
51 t = [0 ,0 ,0 ,0 ,0 ,0]
52 for i in range (100) :
53 k = random . randint (1 ,6)
54 t [k -1] += 1
55
56 print ( t )

Q4
59 def est_element (t , x ) :
60 n = len ( t )
61 for i in range ( n ) :
62 if t [ i ] == x :
63 return True
64 return False
65

66 # Tests unitaires
67 t = []; x = 1
68 assert est_element (t , x ) == False
69 t = [1 ,2 ,3 ,1]; x = 5
70 assert est_element (t , x ) == False
71 t = [1]; x = 1
72 assert est_element (t , x ) == True
73 t = [1 ,2 ,3 ,1]; x = 1
74 assert est_element (t , x ) == True
75 t = [1 ,2 ,3 ,4]; x = 4
76 assert est_element (t , x ) == True
77 t = [1 ,2 ,3 ,4]; x = 2
78 assert est_element (t , x ) == True
79 t = [1 ,2 ,1 ,1]; x = 1
80 assert est_element (t , x ) == True
81
82 # OK avec cha î nes de caract è res quand x est un caract è re :
83 t = " 123 " ; x = '3 '
84 assert est_element (t , x ) == True
85 # OK avec tuples :

Lycée Michelet - CPGE 1re année 3


2022-2023 TP n° 3 (2 heures) Informatique

86 t = (1 ,2 ,3) ; x = 3
87 assert est_element (t , x ) == True
88 # OK avec range ( n )
89 n = 4
90 t = range ( n ) ; x = 3
91 assert est_element (t , x ) == True

Q5
94 def nombre (t , x ) :
95 n = len ( t )
96 nb = 0
97 for i in range ( n ) :
98 if t [ i ] == x :
99 nb = nb +1
100 return nb
101
102 # Tests unitaires
103 t =[1 ,2 ,3 ,1]
104 assert nombre (t ,1) == 2
105 assert nombre (t ,2) == 1
106 assert nombre (t ,5) == 0

Q6
109 def nombre_de_pairs ( t ) :
110 n = len ( t )
111 nb = 0
112 for i in range ( n ) :
113 if t [ i ]%2 == 0:
114 nb = nb +1
115 return nb
116
117 # Tests unitaires
118 t =[0 ,2 ,3 ,0]; assert nombre_de_pairs ( t ) == 3
119 t =[1 ,3 ,3 ,5]; assert nombre_de_pairs ( t ) == 0
120 t =[1 ,3 ,4 ,5]; assert nombre_de_pairs ( t ) == 1

Q7
123 def somme_carres ( t ) :
124 n = len ( t )
125 somme = 0
126 for i in range ( n ) :
127 somme = somme + t [ i ]**2
128 return somme
129
130 t =[1 ,2 ,3 ,4]; assert somme_carres ( t ) == 30

Q8
133 def produit ( t ) :
134 n = len ( t )
135 produit = 1
136 for i in range ( n ) :
137 produit = produit * t [ i ]
138 return produit
139
140 t =[1 ,2 ,3 ,4]; assert produit ( t ) == 24

Lycée Michelet - CPGE 1re année 4


2022-2023 TP n° 3 (2 heures) Informatique

Q9
143 def somme_pairs ( t ) :
144 n = len ( t )
145 somme = 0
146 for i in range ( n ) :
147 if t [ i ]%2 == 0:
148 somme = somme + t [ i ]
149 return somme
150
151 t =[1 ,2 ,3 ,4]; assert somme_pairs ( t ) == 6

Q10
154 def s o mm e _ in d i ce s _ pa i r s ( t ) :
155 n = len ( t )
156 somme = 0
157 for i in range ( n ) :
158 if i %2 == 0:
159 somme = somme + t [ i ]
160 return somme
161

162 # Tests unitaires


163 t =[]; assert s o m me _ i nd i c es _ p ai r s ( t ) == 0
164 t =[1]; assert s o m me _ i nd i c es _ p a ir s ( t ) == 1
165 t =[1 ,5 ,3 ,7]; assert s o m me _ i nd i c e s_ p a ir s ( t ) == 4

Q11
168 def palindrome ( t ) :
169 n = len ( t )
170 for i in range ( n ) :
171 if t [ i ] != t [n -1 - i ]:
172 return False
173 return True
174
175 # Tests unitaires
176 t =[]; assert palindrome ( t ) == True
177 t =[2]; assert palindrome ( t ) == True
178 t =[1 ,2]; assert palindrome ( t ) == False
179 t =[1 ,2 ,1]; assert palindrome ( t ) == True
180 t =[1 ,2 ,1 ,2]; assert palindrome ( t ) == False

Q12
183 def tous_positifs ( t : list ) -> bool :
184 n = len ( t )
185 for i in range ( n ) :
186 if t [ i ] <=0:
187 return False
188 return True
189
190 # Tests unitaires
191 t =[1 ,2 ,3 ,4]; assert tous_positifs ( t ) == True
192 t =[1 ,0 ,3 ,4]; assert tous_positifs ( t ) == False
193 t =[1 , -2 ,3 ,4]; assert tous_positifs ( t ) == False

Lycée Michelet - CPGE 1re année 5


2022-2023 TP n° 3 (2 heures) Informatique

196 def tous_positifs2 ( t : list ) -> bool :


197 n = len ( t )
198 i = 0
199 res = False
200 while i < n and t [ i ] >0: # l ' ordre des tests est importants , cf . é
valuation paresseuse pour i == n ; si on inverse les tests , on a un
message d ' erreur lors du test t [ n ] >0 car t [ n ] n ' est pas d é fini
201 i += 1
202 if i == n :
203 res = True
204 return res
205
206 # Tests unitaires
207 t =[1 ,2 ,3 ,4]; assert tous_positifs2 ( t ) == tous_positifs ( t )
208 t =[1 ,0 ,3 ,4]; assert tous_positifs2 ( t ) == tous_positifs ( t )
209 t =[1 , -2 ,3 ,4]; assert tous_positifs2 ( t ) == tous_positifs ( t )

Q13
212 def existe_positifs ( t : list ) -> bool :
213 n = len ( t )
214 for i in range ( n ) :
215 if t [ i ] > 0:
216 return True
217 return False
218

219 # Tests unitaires


220 t =[]; assert existe_positifs ( t ) == False
221 t =[ -1]; assert existe_positifs ( t ) == False
222 t =[1]; assert existe_positifs ( t ) == True
223 t =[0 , -1]; assert existe_positifs ( t ) == False
224 t =[0 , -1 ,2]; assert existe_positifs ( t ) == True
225 t =[2 , -1 , -2]; assert existe_positifs ( t ) == True

Q14
228 def liste_entiers ( n : int , p : int ) -> list :
229 assert n <p , " nombres incoh é rents "
230 L =[]
231 for i in range (n , p ) : # entiers de n à p -1
232 L . append ( i )
233 return L
234
235 n , p =2 ,3; assert liste_entiers (n , p ) == [2]
236 n , p = -4 ,11; assert liste_entiers (n , p ) == [ -4 , -3 , -2 , -1 , 0 , 1 , 2 , 3 , 4 ,
5 , 6 , 7 , 8 , 9 , 10]

Q15
239 def liste_cubes ( n : int ) -> list :
240 assert n >=0 , " n doit ê tre positif "
241 L =[]
242 for i in range ( n +1) : # cubes de 0 à n
243 L . append ( i **3)
244 return L
245
246 n =0; assert liste_cubes ( n ) == [0]
247 n =7; assert liste_cubes ( n ) == [0 , 1 , 8 , 27 , 64 , 125 , 216 , 343]

Lycée Michelet - CPGE 1re année 6


2022-2023 TP n° 3 (2 heures) Informatique

Q16
250 def liste_entiers2 ( n : int , p : int , q : int ) -> bool :
251 assert n >=1 and p >=1 and q >=1 , " les entiers doivent ê tre positifs non
nuls "
252 L =[]
253 for i in range (1 , n +1) :
254 if i % p != 0 and i % q != 0:
255 L . append ( i )
256 return L
257
258 # Tests unitaires
259 n ,p , q = 1 ,2 ,3; assert liste_entiers2 (n ,p , q ) == [1]
260 n ,p , q = 3 ,1 ,4; assert liste_entiers2 (n ,p , q ) == []
261 n ,p , q = 3 ,4 ,1; assert liste_entiers2 (n ,p , q ) == []
262 n ,p , q = 6 ,7 ,8; assert liste_entiers2 (n ,p , q ) == [1 ,2 ,3 ,4 ,5 ,6]
263 n ,p , q = 6 ,8 ,7; assert liste_entiers2 (n ,p , q ) == [1 ,2 ,3 ,4 ,5 ,6]
264 n ,p , q = 8 ,7 ,10; assert liste_entiers2 (n ,p , q ) == [1 ,2 ,3 ,4 ,5 ,6 ,8]
265 n ,p , q = 15 ,5 ,10; t = liste_entiers2 (n ,p , q ) ;
266 for i in range ( len ( t ) ) :
267 assert t [ i ]%5 != 0
268 n ,p , q = 10 ,2 ,3; assert liste_entiers2 (n ,p , q ) == [1 ,5 ,7]

Q17 1.
272 def est_multiple ( x : int , L : list ) -> bool :
273 n = len ( L )
274 i = 0
275 while i < n :
276 if x % L [ i ] == 0:
277 return True
278 i += 1
279 return False
280
281 # Tests unitaires
282 L =[]; x =0; assert est_multiple (x , L ) == False
283 L =[2 ,3 ,4]; x =0; assert est_multiple (x , L ) == True
284 L =[2 ,3 ,4]; x =2; assert est_multiple (x , L ) == True
285 L =[2 ,3 ,4]; x =8; assert est_multiple (x , L ) == True
286 L =[2 ,3 ,4]; x =17; assert est_multiple (x , L ) == False

2.
289 def liste_entiers3 (n , L ) :
290 M = []
291 for i in range (1 , n +1) :
292 if not est_multiple (i , L ) :
293 M . append ( i )
294 return M
295
296 L =[2 ,3 ,7 ,17]; n =20; assert liste_entiers3 (n , L ) == [1 , 5 , 11 , 13 , 19]

Q18 1.
300 def s ommes_ parti elles ( L ) :
301 n = len ( L )
302 M =[]
303 somme =0
304 for i in range ( n ) :
305 somme = somme + L [ i ]
306 M . append ( somme )
307 return M
308
309 L =[2 ,3 ,4 , -1]; assert somm es_par tielle s ( L ) == [2 , 5 , 9 , 8]

Lycée Michelet - CPGE 1re année 7


2022-2023 TP n° 3 (2 heures) Informatique

2.
312 def reciproque ( L ) :
313 n = len ( L )
314 N =[ L [0]] # premi è re valeur
315 for i in range (1 , n ) :
316 N . append ( L [ i ] - L [i -1])
317 return N
318
319 L =[2 ,3 ,4 , -1]; assert reciproque ( somm es_pa rtiell es ( L ) ) == L

Lycée Michelet - CPGE 1re année 8

Vous aimerez peut-être aussi