Sol Test3 Practice31

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 13

ITI1520

Exemples des questions de Test 3 – pratique 3


SOLUTION

1) Quel est le type pour les paramètres et le résultat dans la définition de


fonction suivante?

def test(x):
'''
Retourne True si la valeur 0 se trouve en x, et False sinon
>>> test((1,2,0,4,5))
True
>>> test((1,5,6))
False
'''
res = False
for val in x:
if val == 0:
res = True
return res

Réponses possibles (choisissez une):

a) (str,str)->bool
b) (tuple)->bool
c) (tuple,int)->noneType
d) (str)-> int

Réponse correcte : b)
Explication: Le type du résultat est booléen. Il y a un paramètre de type tuple
(ou list).
2) Quelle est la description correcte de la fonction suivante?
def ma_fonction(m):
'''(list) -> bool
Description:
>>> m = [[1,2,3],[4,5,6],[7,0,8]]
>>> ma_fonction(m)
True
>>> m2 = [[1],[3,4,5]]
>>> ma_fonction(m2)
False
'''
res = False
for rang_val in m:
for col_val in rang_val:
if col_val == 0:
res = True
break
return res

Réponses possibles (choisir une):

a) Retourne True si la matrice m (ou liste de listes) contient au moins un


zéro
b) Retourne True si la matrice m (ou liste de listes) ne contient pas des
zéros
c) Change tous les éléments dans la matrice m (ou liste de listes) a zéro
d) Aucun de ci-dessus
Réponse correct : a)
Explication : Les boucles s’arrêtent quand on trouve un zéro

3) Si la liste L contient N = 1000 éléments, combien de pas sont effectués


dans la fonction suivante? Autrement dit, combien de fois le test L[i]==L[j]
est exécuté ?

def ma_fonction(L):
compteur=0
for i in range(len(L)):
semaphore=True
for j in range(len(L)):
if L[i] == L[j] and i!=j:
semaphore = False
if semaphore:
compteur=compteur+1
return compteur

L=[1, 0, 2, 0, 3]
resultat = ma_fonction(L)
print(resultat)

Réponses possibles (choisir une):

a) Moins de 20
b) Entre 1 000 et 9 000 fois
c) Entre 10 000 and 100 000 fois
d) Entre 200 000 et 2 millions de fois
e) Entre 10 millions et 200 millions de fois
Réponse correcte : d)
Explication: Le test est exécuté N^2 fois. La boucle extérieure s’exécute N
fois, et pour chaque pas de la boule extérieure, la boucle intérieure s’exécute
N fois. La fonction à l’ordre de complexité O(N^2). 1000^2 = 1 million,
donc la réponse et d)

4) Combien d’objets sont créés dans ce programme ?

class Point(object):
def __init__(self,x,y):
self.x = x
self.y = y

p1 = Point(10,20)
p2 = Point(30,50)
p3 = p2
p4 = Point(-10,5)
p4 = p1

Réponses possibles (choisir une):

a) 3
b) 4
c) 5
d) 2
e) Aucune des réponses ci-dessus

b. Combiens d’objets sont encore disponible (accessible) à la fin du


programme (avant qu’il se termine) ?
Réponses possibles (choisir une):

a) 3
b) 4
c) 5
d) 2
e) Aucune des réponses ci-dessus
Réponse correcte :
a. a)
Explication : 3 objets sont créés en utilisant le constructeur de la classe
Point.

b. d)

Explication : seulement 2 sont accessibles à la fin du programme parce que


p4 devient une référence à p1 et la référence originale de p4 est perdu.

5) Qu’est-ce que le programme suivant affiche-t-il?


def orange(n):
if n > 0:
print(n,end=" ")
orange(n-2)

def guava(n):
if n > 0:
guava(n-2)
print(n,end=" ")

guava(10)
print()
orange(10)
print()

Réponses possibles (choisir une):

a) 1 3 5 7 9
97531

b) 2 4 6 8 10
10 8 6 4 2

c) 10 8 6 4 2
2 4 6 8 10

d) Aucun de ci-dessus
Réponse correcte : b)
Explication : Les fonctions affichent des nombres de 10 à 2. Orange le fait
avant l’appel récursif et guava après.

6) Laquelle est la plus correcte description de la fonction suivante ?

def ma_fonction(x, v):


'''
Description:
>>> ma_fonction((1,2,3,2,5), 2)
True
>>> ma_fonction((1,5,6), 2)
False
'''
res = False
n = 0
for val in x:
if val == v:
n = n + 1
if n == 2:
res = True
return res

Réponses possibles (choisissez une):

a) Retourne False si la valeur v se trouve en x


b) Retourne True si la valeur 2 se trouve en x
c) Retourne False si la valeur 2 se trouve en x
d) Retourne True si la valeur v se trouve au moins 2 fois en x
Réponse correcte d)
Explication : On compte les occurrences de v en x. La boucle s’arrête quand
n est 2

7) Lesquels des programmes suivants I, II, et III sont équivalentes à ce


programme:

m = [[1,2,3],[4,5,6]]
rang = 0
while rang < len(m):
col = 0
while col < len(m[rang]):
m[rang][col] = 0
col = col + 1
rang = rang + 1

I.
m = [[1,2,3],[4,5,6]]
for rang_val in m:
for col_val in rang_val:
col_val = 0

II.
m = [[1,2,3],[4,5,6]]
for val_rang in m:
col = 0
while col < len(val_rang):
val_rang[col] = 0
col = col + 1

III.
m = [[1,2,3],[4,5,6]]
rang = 0
while rang < len(m):
col = 0
while col < len(m):
m[rang][col] = 0
col = col + 1
rang = rang + 1
Réponses possibles (choisir une):

a) I seulement
b) II seulement
c) III seulement
d) I et II
e) I, II, et III

Réponse correct : b)
Explication : Le programme met des zéros dans tous les éléments de la matrice
m. II fait le même. I met zéro dans la variable val_col, mais pas dans la
matrice. III ne visite pas toutes les colonnes.

8) Que fait la fonction de la question 3? Quelle est la description la plus


correcte de la fonction?

Réponses possibles (choisir une):

a) Compte combien d’éléments arrivent seulement une fois dans la liste.


b) Compte combien d‘éléments arrivent au moins deux fois dans la liste.
c) Vérifie s’il y a des éléments qui arrivent au moins deux fois dans la liste
d) Vérifie s‘il y a des éléments qui arrivent seulement une fois dans la liste.
e) Aucune des réponses ci-dessus.

Réponse correcte : a)
Explication: Le compteur est incrémente quand sémaphore devient vrais.
Quand il y a des éléments dupliqués le sémaphore devient faux.
9) Qu’-est ce que le programme Python suivant va-t-il afficher sur l’écran?
class PingPong(object):
num = 0
def next(self):
if (PingPong.num % 2 == 0):
print("Ping")
else:
print("Pong")
PingPong.num += 1

b = PingPong()
b.next()
b.next()
b.next()

c = PingPong()
c.next()
c.next()

Réponses possibles (choisir une):

a) Ping
Ping
Ping
Ping
Ping

b) Pong
Pong
Pong
Pong
Pong

c) Ping
Pong
Ping
Pong
Ping

d) Aucune des réponses ci-dessus


Réponse correcte: c)
Explication : num est une variable de classe qui est incrémentée chaque fois
que la méthode next() est appelé par n’importe quel objet. Donc si on a 5
appels, num et 0 dans le premier appel, après ca 1, 2, 3, 4. La première fois
le message affiché est Ping parce que num est divisible par 2, après ca le
message est Pong et il continue à alterner entre les deux messages.

10) Combien d’appels récursifs sont effectués dans le programme suivant ?

def ma_fonction(n):
if n == 1:
return 1
else:
return n + ma_fonction(n - 1)

print(ma_fonction(-4))

Réponses possibles (choisir une):

a) 4
b) -4
c) 10
d) infini

Réponse correcte : d)
Explication : récursivité infini avec -4, -5, -6, -7, ….. parce que le cas de
base n’est jamais exécuté.
11)
L’ordre de complexité est utilisé pour mesurer le nombre des opérations
exécutées par un algorithme dans le pire des cas (en anglais: Big O
notation). Les constantes et les termes plus petits sont ignorés quand n
deviens large. Par exemple:
4n2 est O(n2)
n2/100 +n est O(n2)
20n -70 est O(n)
10 log2 n + 100 est O(log2 n)

Pour chacune des 3 fonctions suivantes, combien d’opérations sont


exécutées dans la fonction, approximativement, quand n devient large? Par
exemple, pour f2, la réponse est: approximativement linéaire avec n, donc
O(n).

def f1(n):
i = n
while i >= 1 :
i = i // 2

def f2(n):
for i in range(n) :
print('*')

def f3(n):
for i in range(n) :
for j in range(i+1, n):
print('*')

Réponses:

f1: O(log2 n)
f2: O(n)
f3: O(n2)
12) Dans la fonction Python suivante une ligne de code qui manque.
def maFonction(x, v):
v = v + 1
t = 100
index = 0
# code manque
x[index] = x[index] * 2
index = index + 1
return v

>>> a = [10, 20, 30]


>>> t = 5
>>> print(maFonction(a, t), t, a)
6 5 [20, 20, 60]

Quelle ligne devrait être la ligne qui maque ?


Réponses possibles (choisir une):

a) while index < len(x) and index % 2 == 1:


b) while index < len(x) and index % 2 == 0:
c) while index < len(x):
if index % 2 == 1:
d) while index < len(x):
if index % 2 == 0:

Réponse correcte d)
Explication: On doit changer les éléments d'index paire (0,2,…)
Les éléments dans la liste a changent par la référence locale à la liste nommé
x. La valeur de la variable globale t ne changes pas. Il y a la variable locale t
qui prend la valeur 100.
13) Qu’est ce que le programme Python suivant va-t-il afficher sur l’écran?

def f(x, v):


global b
b = b + 1
for val in x:
print(val, end=" ")

return v

a = "12"
b = 7
print(f(a,b), end=" ")
print(b)

Réponses possibles (choisir une):

a) 1 2 7 7
b) 8 1 2 7
c) 1 2 7 8
d) 7 1 2 7

Réponse correcte c)
Explication: Va exécuter f(a,b) qui affiche 1 2 après ça va effectues le print.
On affiche la valeur retourné (de v qui est 7) est affiché.
Apres ca on affiche b, qui a changé dans la fonction et devenu 8. La
déclaration global empêche la fonction de créer une autre variable b locale.

Vous aimerez peut-être aussi