Aller au contenu

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

image

###
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