Nombre de mots dans une phrase - Sujet 36 - EP NSI 2025

Moyen Officiel
Python (3.14.0)

Énoncé du problème

Exercice 1

Dans cet exercice, on considère des phrases composées de mots.

  • 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 ' '.

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 nombre 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.

>>> nombre_de_mots('Cet exercice est simple.')
4
>>> nombre_de_mots('Le point d exclamation est séparé !')
6
>>> nombre_de_mots('Combien de mots y a t il dans cette phrase ?')
10
>>> nombre_de_mots('Fin.')
1

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.

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 :

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

Les contraintes ci-dessous sont ajoutées par la plateforme et ne font pas partie du sujet.

Exercice 1

Contraintes :

  • phrase est une chaîne de caractères (str) toujours bien formée au sens de la définition de phrase donnée ci-dessus
  • 1 <= nombre de mots de phrase <= 60
  • 1 <= longueur de chaque mot <= 20
  • len(phrase) <= 1000
  • les mots sont séparés entre eux par un seul caractère espace ' ', et il n’y a ni espace en début de phrase ni espace multiple
  • phrase se termine soit par '.' collé au dernier mot, soit par ' !' ou ' ?' (un seul espace avant le signe)
  • la fonction renvoie un entier (int)

Exercice 2

Contraintes :

  • les étiquettes et les clés sont des entiers (int) avec -10^4 <= etiquette, cle <= 10^4
  • l’arbre ne contient pas de doublons et cle n’est pas déjà présente dans l’arbre
  • inserer est toujours appelée sur un arbre non vide, c’est-à-dire sur une instance existante de Noeud
  • au plus 10^3 appels à inserer sont effectués sur un même arbre
  • inserer ne renvoie rien : elle modifie l’arbre en place en préservant sa structure d’arbre binaire de recherche