Les mots de la langue française

Contexte

Le français est une langue indo-européenne de la famille des langues romanes. Le français est parlé, en 2018, sur tous les continents par environ 300 millions de personnes.

Environnement de travail

Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex09-mots.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :

  1. Imports et définition des variables globales ;
  2. Définition des fonctions secondaires ;
  3. Définition de la fonction principale ;
  4. Appel protégé de la fonction principale.

Le fichier ex09-mots-data.txt contient une liste de mots de la langue française. Il s’agit ici d’effectuer des recherches sur cet ensemble de mots. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Lecture des données

Objectifs

Ecrire une fonction liste_mots() :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Informations complémentaires

Les mots contenus dans le fichier sont suivis d’un caractère spécial \n (retour à la ligne) qu’il conviendra de retirer. Pour effectuer cette opération, quelle est la méthode de chaine de caractère la plus adaptée ?

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex09_mots.py -v

La totalité des doctests doivent réussir.

Applications

A partir de cette liste, rechercher les mots en position 24499, 28281, 57305, 118091, 199316, 223435, 336455. Ça devrait vous faire penser à un célèbre personnage de bande dessinée.

Ensemble des mots

Objectifs

Ecrire une fonction ensemble_mots :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Informations complémentaires

Cette fonction doit être écrite sans duplication de code, et donc faire appel à liste_mots().

Le constructeur de set prend en argument une séquence, c’est à dire un objet itérable.

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex09_mots.py -v

La totalité des doctests doivent réussir.

Applications

La recherche dans une list possède de piètres performances. Dans les pires cas (le mot recherché est présent mais en dernière position, ou le mot recherché n’est pas présent) il faut balayer toute la liste, et la complexité algorithmique est en \(\Theta(n)\).

Le set est ici beaucoup plus adapté. La complexité algorithmique de la recherche est cette fois en \(\Theta(1)\). Au détriment il est vrai d’un encombrement mémoire plus important.

Comme pour la list, l’écriture de l’appartenance pour un set fait appel à l’opérateur in.

Utiliser la fonction main() et l’opérateur in pour vérifier la présence ou non des mots “chronophage”, “procrastinateur”, “dangerosité”, et “gratifiant” dans la liste.

Les mots de n lettres

Objectifs

Ecrire une fonction mots_de_n_lettres() :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex09_mots.py -v

La totalité des doctests doivent réussir.

Applications

Le jeu de Scrabble accorde un bonus de 50 points lorsque le joueur parvient à placer la totalité de ses 7 lettres sur le plateau.

Quel est le nombre de mots de 7 lettres dans le fichier utilisé ?

Utiliser la fonction random.sample() pour en afficher quelques uns.

Mots spéciaux

Contexte

Dans la version française du Scrabble, certaines lettres rares rapportent plus de points que d’autres et il peut être intéressant de connaître les mots qui les utilisent.

Objectifs

Ecrire une fonction mots_avec() :

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal.

$ python -m doctest ex09_mots.py -v

La totalité des doctests doivent réussir.

Applications

Quel est le nombre de mots contenant la lettre k dans le fichier utilisé ? Utiliser la fonction random.sample() pour en afficher quelques uns.

Même question pour la lettre w.

Même question pour la lettre z.

Recherche complexe

Contexte

Les set sont des structures de données très puissantes pour réaliser des opérations ensemblistes.

Objectifs

Utiliser la fonction main() pour combiner les fonctions précédentes et les opérateurs and et or pour :

Utiliser les méthodes str.startswith et str.endswith pour rechercher les mots:

L’union des 3 ensembles ci dessus est il égal à l’ensemble des mots contenant un z ? Afficher la différence.

Combiner les opérations précédentes pour rechercher le nombre de mots :