Listes opérations
Poo
Récursivité
Ep 11
le document
l'algorithme
Issue de : 23-NSI-40
EXERCICE 1
Pour cet exercice :
On appelle « mot » une chaßne de caractÚres composée avec des caractÚres choisis parmi les 26 lettres minuscules ou majuscules de l'alphabet,
On appelle « phrase » une chaßne de caractÚres :
composée avec un ou 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 ' '
.
Exemples :
'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.
Exemple :
đ Script Python >>> nombre_de_mots ( 'Le point d exclamation est separe !' )
6
>>> nombre_de_mots ( 'Il y a un seul espace entre les mots !' )
9
>>> nombre_de_mots ( 'Combien de mots y a t il dans cette phrase ?' )
10
>>> nombre_de_mots ( 'Fin.' )
1
RĂ©ponse
Complétez le code ci-dessous
# Mettre votre code icibksl-nlbksl-nl
Solution
def nombrepy-unddepy-undmots(phrase):bksl-nl nbpy-undmots = 0bksl-nl for caractere in phrase:bksl-nl if caractere == ' ' or caractere == '.':bksl-nl nbpy-undmots += 1bksl-nl return nbpy-undmotsbksl-nlbksl-nltry:bksl-nl assert nombrepy-unddepy-undmots('Le point d exclamation est separe !') == 6bksl-nl assert nombrepy-unddepy-undmots('Il y a un seul espace entre les mots !') == 9bksl-nl assert nombrepy-unddepy-undmots('Combien de mots y a t il dans cette phrase ?') == 10bksl-nl assert nombrepy-unddepy-undmots('Fin.') == 1bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nl
EXERCICE 2
Un arbre binaire de recherche est soit vide, reprĂ©sentĂ© en Python par la valeur None, soit un nĆud, contenant une Ă©tiquette et deux sous-arbres gauche et droit et reprĂ©sentĂ© par une instance de la classe Noeud donnĂ©e ci-dessous.
On considĂšre ici que les Ă©tiquettes des nĆuds sont des entiers et que les arbres binaires de recherche considĂ©rĂ©s ne contiennent pas de doublons.
đ Script Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class Noeud :
def __init__ ( self , etiquette ):
'''MĂ©thode constructeur pour la classe Noeud.
Crée une feuille d'étiquette donnée.'''
self . etiquette = etiquette
self . gauche = None
self . droit = None
def inserer ( self , cle ):
'''InsÚre la clé dans l'arbre binaire de recherche
en préservant sa structure.'''
if cle < self . etiquette :
if self . gauche != None :
...
else :
self . gauche = ...
else :
...
...
else :
... = Noeud ( cle )
ComplĂ©ter la mĂ©thode rĂ©cursive inserer afin quâelle permette dâinsĂ©rer une clĂ© dans
lâarbre binaire de recherche non vide sur lequel on lâappelle.
Voici un exemple dâutilisation :
đ Script Python >>> arbre = Noeud ( 7 )
>>> for cle in ( 3 , 9 , 1 , 6 ):
arbre . inserer ( cle )
>>> arbre . gauche . etiquette
3
>>> arbre . droit . etiquette
9
>>> arbre . gauche . gauche . etiquette
1
>>> arbre . gauche . droit . etiquette
6
RĂ©ponse
Complétez le code ci-dessous
class Noeud:bksl-nl def py-undpy-undinitpy-undpy-und(self, etiquette):bksl-nl '''Méthode constructeur pour la classe Noeud.bksl-nl Crée une feuille d'étiquette donnée.'''bksl-nl self.etiquette = etiquettebksl-nl self.gauche = Nonebksl-nl self.droit = Nonebksl-nlbksl-nl def inserer(self, cle):bksl-nl '''InsÚre la clé dans l'arbre binaire de recherchebksl-nl en préservant sa structure.'''bksl-nl if cle < self.etiquette:bksl-nl if self.gauche != None:bksl-nl ...bksl-nl else:bksl-nl self.gauche = ... bksl-nl else:bksl-nl ...bksl-nl ...bksl-nl else:bksl-nl ... = Noeud(cle)bksl-nlbksl-nl
Solution
class Noeud:bksl-nl def py-undpy-undinitpy-undpy-und(self, etiquette):bksl-nl '''MĂ©thode constructeur pour la classe Noeud.bksl-nl CrĂ©e une feuille d'Ă©tiquette donnĂ©e.'''bksl-nl self.etiquette = etiquettebksl-nl self.gauche = Nonebksl-nl self.droit = Nonebksl-nlbksl-nl def inserer(self, cle):bksl-nl '''InsĂšre la clĂ© dans l'arbre binaire de recherchebksl-nl en prĂ©servant sa structure.'''bksl-nl if cle < self.etiquette:bksl-nl # on insĂšre Ă gauchebksl-nl if self.gauche != None:bksl-nl # on descend Ă gauche et on retente l'insertion de la clĂ©bksl-nl self.gauche.inserer(cle)bksl-nl else:bksl-nl # on crĂ©e un fils gauchebksl-nl self.gauche = Noeud(cle)bksl-nl else:bksl-nl # on insĂšre Ă droitebksl-nl if self.droit != None:bksl-nl # on descend Ă droite et on retente l'insertion de la clĂ©bksl-nl self.droit.inserer(cle)bksl-nl else:bksl-nl # on crĂ©e un fils droitbksl-nl self.droit = Noeud(cle)bksl-nlbksl-nltry:bksl-nl arbre = Noeud(7)bksl-nl for cle in (3, 9, 1, 6):bksl-nl arbre.inserer(cle)bksl-nlbksl-nl assert arbre.gauche.etiquette == 3bksl-nl assert arbre.droit.etiquette == 9bksl-nl assert arbre.gauche.gauche.etiquette == 1bksl-nl assert arbre.gauche.droit.etiquette == 6bksl-nl print('Tout semble correct đ')bksl-nlbksl-nlexcept AssertionError as asser:bksl-nl print('Le rĂ©sultat de votre fonction n\'est pas conforme đ€')bksl-nlbksl-nl