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 python-09-sets-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 python-09-sets-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 exercice.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 exercice.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 exercice.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 exercice.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
?