Sujet n°40
Sujet original
Pour télécharger l'énoncé original, cliquer ici.
Exercice n°1
Pour cet exercice :
-
On appelle « mot » une chaîne de caractères composée de caractères choisis
parmi les 26 lettres minuscules ou majuscules de l'alphabet,
-
On appelle « phrase » une chaîne de caractères :
- composée d’un ou de plusieurs « mots » séparés entre eux par un seul caractère espace
' '
,
-
se finissant :
- soit par un point
'.'
qui est alors collé au dernier
mot,
- soit par un point d'exclamation
'!'
ou d'interrogation '?'
qui est alors séparé du dernier mot par un seul caractère espace ' '
.
Voici deux exemples de phrases :
'Cet exercice est simple.'
'Le point d exclamation est separe !'
Après avoir remarqué le lien entre le nombre de mots et le nombres de
caractères espace dans une phrase, programmer une fonction nombre_de_mots
qui prend en paramètre une phrase et renvoie le nombre de mots présents dans
cette phrase.
Exemples
>>> nombre_de_mots('Cet exercice est simple.')
4
>>> nombre_de_mots('Le point d exclamation est separe !')
6
>>> nombre_de_mots('Combien de mots y a t il dans cette phrase ?')
10
>>> nombre_de_mots('Fin.')
1
Une solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | def nombre_de_mots(phrase):
nb_mots = 0
for carac in phrase:
if carac == ' ':
nb_mots += 1
if phrase[len(phrase)-1] == '.':
nb_mots += 1
return nb_mots
if __name__ == '__main__':
# Exemples de l'énoncé
print(nombre_de_mots('Cet exercice est simple.') == 4)
print(nombre_de_mots('Le point d exclamation est separe !') == 6)
print(nombre_de_mots('Combien de mots y a t il dans cette phrase ?') == 10)
print(nombre_de_mots('Fin.') == 1)
# Exemples supplémentaires
print(nombre_de_mots('Il y a un seul espace entre les mots.') == 9)
print(nombre_de_mots('Bravo vous avez bien codé la fonction !') == 7)
print(nombre_de_mots('Quelle est la meilleur manière de coder ?') == 7)
|
Exercice n°2
La classe Noeud
ci-dessous permet d'implémenter une structure d'arbre binaire de
recherche (ABR). On considère que la clé d’un nœud est un entier et qu’elle est
unique dans l’ABR.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 | class Noeud:
def __init__(self, valeur):
'''Méthode constructeur pour la classe Noeud.
Paramètre d'entrée : valeur (int)'''
self.valeur = valeur
self.gauche = None
self.droit = None
def getValeur(self):
'''Méthode accesseur pour obtenir la valeur du noeud
Aucun paramètre en entrée'''
return self.valeur
def droitExiste(self):
'''Méthode renvoyant True si le sous-arbre droit est non vide
Aucun paramètre en entrée'''
return (self.droit is not None)
def gaucheExiste(self):
'''Méthode renvoyant True si le sous-arbre gauche est non vide
Aucun paramètre en entrée'''
return (self.gauche is not None)
def inserer(self, cle):
'''Méthode d'insertion de clé dans un arbre binaire de recherche
Paramètre d'entrée : cle (int)'''
if cle < ... :
# on insère à gauche
if self.gaucheExiste():
# on descend à gauche et on recommence le test initial
...
else:
# on crée un fils gauche
self.gauche = ...
elif cle > ... :
# on insère à droite
if ... :
# on descend à droite et on recommence le test initial
...
else:
# on crée un fils droit
... = Noeud(cle)
|
Commentaire sur le code original
Pour télécharger l'original du fichier à compléter,
cliquer ici.
Compléter la fonction récursive inserer
afin qu'elle permette d’insérer un nœud
dans l’arbre binaire de recherche proposé, à l’aide de sa clé.
Exemple
Voici un exemple d'utilisation :
>>> arbre = Noeud(7)
>>> for cle in (3, 9, 1, 6):
... arbre.inserer(cle)
>>> arbre.gauche.getValeur()
3
>>> arbre.droit.getValeur()
9
>>> arbre.gauche.gauche.getValeur()
1
>>> arbre.gauche.droit.getValeur()
6
Une solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 | class Noeud:
def __init__(self, valeur):
'''Méthode constructeur pour la classe Noeud.
Paramètre d'entrée : valeur (int)'''
self.valeur = valeur
self.gauche = None
self.droit = None
def getValeur(self):
'''Méthode accesseur pour obtenir la valeur du noeud
Aucun paramètre en entrée'''
return self.valeur
def droitExiste(self):
'''Méthode renvoyant True si le sous-arbre droit est non vide
Aucun paramètre en entrée'''
return (self.droit is not None)
def gaucheExiste(self):
'''Méthode renvoyant True si le sous-arbre gauche est non vide
Aucun paramètre en entrée'''
return (self.gauche is not None)
def inserer(self, cle):
'''Méthode d'insertion de clé dans un arbre binaire de recherche
Paramètre d'entrée : cle (int)'''
if cle < self.valeur :
# on insère à gauche
if self.gaucheExiste():
# on descend à gauche et on recommence le test initial
self.gauche.inserer(cle)
else:
# on crée un fils gauche
self.gauche = Noeud(cle)
elif cle > self.valeur :
# on insère à droite
if self.droitExiste() :
# on descend à droite et on recommence le test initial
self.droit.inserer(cle)
else:
# on crée un fils droit
self.droit = Noeud(cle)
if __name__ == '__main__':
# Exemple de l'énoncé
arbre = Noeud(7)
for cle in (3, 9, 1, 6):
arbre.inserer(cle)
print(arbre.gauche.getValeur() == 3)
print(arbre.gauche.gauche.getValeur() == 1)
print(arbre.gauche.droit.getValeur() == 6)
# Exemple supplémentaire
arbre = Noeud(3)
for cle in (1, 2, 4, 5):
arbre.inserer(cle)
print(arbre.gauche.droit.getValeur() == 2)
print(arbre.droit.getValeur() == 4)
print(arbre.droit.droit.getValeur() == 5)
|