Skip to article frontmatterSkip to article content

Licence CC BY-NC-ND, Thierry Parmentelat

préparatifs

input()

voyez la fonction input() pour poser une question et lire la réponse dans le terminal
essayez vous-même

# pour poser la question et avoir la réponse
reponse = input("une question: ")

# le retour de input(), c'est directement la chaine qu'on a tapée, sans newline ni rien
print(reponse)

notebooks

si vous envisagez de faire ce TP dans un notebook, assurez-vous de bien lire cette section

v1: un coup, les mots-clé en dur

on veut écrire un programme qui

une session pourrait ressembler à ceci

>>> watson()
bonjour, à vous: j'ai mal dormi aujourd'hui
Ohhhh, c'est triste.
C'est fini, au revoir !
>>>
# pour ceux qui travaillent dans un notebook

def watson():
    ...

watson()

solution v1

v2 - les mots-clé dans une liste

on change un peu le code; on veut reconnaitre les phrases positives ou négatives sur la base de plusieurs mots; par exemple

NEGATIVE_WORDS = ["mal", "triste", "marre"]
POSITIVE_WORDS = ["bien", "super", "content", "contente"]

v3 - meilleure idée ?

est-ce que de mettre les mots-clés dans une liste c’est une bonne idée ? est-ce qu’on peut améliorer la performance du code du coup ?

v4 - les mots-clé dans un fichier

on veut pouvoir définir les mots-clé dans un fichier; on choisit le format suivant

$ cat watson.txt
POSITIVE bien super content contente
NEGATIVE mal triste marre

ajoutez dans votre code une fonction init_watson(filename) qui retourne - par exemple - un tuple de deux ensembles de mots

v5 - boucle sans fin

au lieu de faire le traitement une seule fois, on va le faire indéfiniment; pour que tout de même on puisse sortir de là, on rajoute une nouvelle catégorie de mots dans le fichier de config:

$ cat watson-config.txt
POSITIVE bien super content contente
NEGATIVE mal triste marre
EXIT bye quit exit

et si un des mots de la phrase est contenu dans la nouvelle catégorie on arrête le programme complètement; c’est-à-dire qu’une session ressemblerait à ceci

>>> watson()
bonjour, à vous: j'ai bien dormi
C'est super, mais encore...
j'ai mal au dents
Ohhhh, c'est triste, mais encore...
c'est fini
je ne comprends pas...
je veux dire exit
C'est fini, au revoir !
>>>

solution v5

v6 - rendre la fonction réglable

# on utilise un autre fichier de config, et en mode debug
>>> watson("watson-config.en", True)
sdfsdf
je ne comprends pas...
awesome this morning
DEBUG: *awesome* this morning
C'est super, mais encore...
had a nice dream
DEBUG: had a *NICE* dream
C'est super, mais encore...
exit
C'est fini, au revoir !

v7 - refactoring

on décide de refactorer le code en créant des classes; par exemple

en option, on peut aussi en faire un vrai programme Python qui se lance depuis la ligne de commande (voir pour ça la librairie argparse)

solution v7

etc..

c’est toujours améliorable... par exemple: