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.
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 :
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.
Ecrire une fonction liste_mots()
:
list
de ces 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).
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 ?
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.
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.
Ecrire une fonction ensemble_mots
:
set
de ces 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).
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.
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.
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.
Ecrire une fonction mots_de_n_lettres()
:
set
) de mots
et un nombre entier n
;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).
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.
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.
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.
Ecrire une fonction mots_avec()
:
set
)) de mots
et une lettre lettre
;lettre
.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).
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.
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
.
Les set
sont des structures de données très puissantes pour réaliser des opérations ensemblistes.
Utiliser la fonction main()
pour combiner les fonctions précédentes et les opérateurs and
et or
pour :
k
;k
ET un w
;Utiliser les méthodes str.startswith
et str.endswith
pour rechercher les mots:
z
;z
;z
en position non terminale.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 :
z
en position non terminale, contenant également un k
;k
en position non terminale, contenant également un z
?