|
@@ -21,12 +21,6 @@ |
|
|
|
|
|
|
|
|
Note: \\~\\ |
|
|
Note: \\~\\ |
|
|
|
|
|
|
|
|
Les sources sont sur GitHub: |
|
|
|
|
|
|
|
|
|
|
|
\url{https://github.com/E2L/cours-python/tree/master/sources}. \\~\\ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mais il vaut mieux recopier le code vous-mêmes. |
|
|
|
|
|
|
|
|
|
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
@@ -77,6 +71,8 @@ Marche aussi avec \texttt{-=}, \texttt{*=} etc. |
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Retour sur les strings} |
|
|
\frametitle{Retour sur les strings} |
|
|
|
|
|
|
|
|
|
|
|
\texttt{\textbackslash n} sert à échapper les retours à la ligne: |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
|
|
|
|
|
|
>>> text = "Je suis un message\nSur deux lignes") |
|
|
>>> text = "Je suis un message\nSur deux lignes") |
|
@@ -90,6 +86,8 @@ Sur deux lignes |
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Concaténation implicite} |
|
|
\frametitle{Concaténation implicite} |
|
|
|
|
|
|
|
|
|
|
|
Pas besoin de `+` pour concaténer des "littéraux". |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
|
|
|
|
|
|
>>> text = "Je suis une " "longue" " string" |
|
|
>>> text = "Je suis une " "longue" " string" |
|
@@ -100,20 +98,6 @@ Sur deux lignes |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{Concaténer des strings (2)} |
|
|
|
|
|
\begin{lstlisting} |
|
|
|
|
|
message = ( |
|
|
|
|
|
"ligne 1\n" |
|
|
|
|
|
"ligne 2\n" |
|
|
|
|
|
) |
|
|
|
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
|
|
Les parenthèse permettent d'aller à la ligne dans le code :) |
|
|
|
|
|
|
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Répéter une string} |
|
|
\frametitle{Répéter une string} |
|
|
|
|
|
|
|
@@ -277,6 +261,12 @@ def greet(name, shout=False): |
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Note} |
|
|
\frametitle{Note} |
|
|
\texttt{print()} est une fonction :) |
|
|
\texttt{print()} est une fonction :) |
|
|
|
|
|
|
|
|
|
|
|
\vfill |
|
|
|
|
|
|
|
|
|
|
|
On dit qu'elle est "built-in", ou "native" en Français, |
|
|
|
|
|
parce que vous n'avez pas eu à l'implémenter. |
|
|
|
|
|
|
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -310,14 +300,14 @@ def greet(name, shout=False): |
|
|
On peut mettre des types différents dans une même liste: |
|
|
On peut mettre des types différents dans une même liste: |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
>>> pommes_et_carottes = [True, 2, "three"] |
|
|
|
|
|
|
|
|
>>> pommes_et_carottes = [True, 2, "trois"] |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
\vfill |
|
|
\vfill |
|
|
Et même des listes dans des listes: |
|
|
Et même des listes dans des listes: |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
>>> liste_de_liste = [[1, 2], ["one", "two"]] |
|
|
|
|
|
|
|
|
>>> liste_de_liste = [[1, 2], ["un", "deux"]] |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -326,7 +316,7 @@ Et même des listes dans des listes: |
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Connaître la taille d'une liste} |
|
|
\frametitle{Connaître la taille d'une liste} |
|
|
Avec la fonction \texttt{len()}: |
|
|
|
|
|
|
|
|
Avec la fonction \texttt{len()} (encore un built-in). |
|
|
|
|
|
|
|
|
\vfill |
|
|
\vfill |
|
|
|
|
|
|
|
@@ -441,7 +431,7 @@ Erreur! |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
>>> message = "un deux trois" |
|
|
>>> message = "un deux trois" |
|
|
>>> message.split() # espaces |
|
|
|
|
|
|
|
|
>>> message.split() |
|
|
["un", "deux", "trois"] |
|
|
["un", "deux", "trois"] |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
\end{frame} |
|
|
\end{frame} |
|
@@ -514,8 +504,8 @@ Création avec la fonction \texttt{set()}: |
|
|
>>> sac = set() |
|
|
>>> sac = set() |
|
|
>>> sac = {} # oups, c'est un dictionnaire vide! |
|
|
>>> sac = {} # oups, c'est un dictionnaire vide! |
|
|
|
|
|
|
|
|
>>> sac = {"one", "two"} # un set avec deux strings |
|
|
|
|
|
>>> len(sac) # len() fonctionne aussi avec les ensembles |
|
|
|
|
|
|
|
|
>>> sac = {"un", "deux"} # un ensemble de deux strings |
|
|
|
|
|
>>> len(sac) # les ensembles ont une taille |
|
|
>>> 2 |
|
|
>>> 2 |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
\end{frame} |
|
|
\end{frame} |
|
@@ -523,20 +513,21 @@ Création avec la fonction \texttt{set()}: |
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Ajout d'un élement dans un ensemble} |
|
|
\frametitle{Ajout d'un élement dans un ensemble} |
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
>>> sac = {"one", "two"} |
|
|
|
|
|
>>> sac.add("three"} |
|
|
|
|
|
# {"one", "two", "three"} |
|
|
|
|
|
>>> sac.add("one") |
|
|
|
|
|
# {"one", "two", "three"} # pas de changement |
|
|
|
|
|
|
|
|
>>> sac = {"un", "deux"} |
|
|
|
|
|
>>> sac.add("trois"} |
|
|
|
|
|
# {"un", "deux", "trois"} |
|
|
|
|
|
>>> sac.add("un") |
|
|
|
|
|
# {"un", "deux", "trois"} # pas de changement |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Autres opérations} |
|
|
\frametitle{Autres opérations} |
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
>>> s1 = {"one", "two"} |
|
|
|
|
|
>>> s2 = {"one", "three"} |
|
|
|
|
|
# {"two"} |
|
|
|
|
|
|
|
|
>>> s1 = {"un", "deux"} |
|
|
|
|
|
>>> s2 = {"deux", "trois"} |
|
|
|
|
|
>>> s2.intersection(s1) |
|
|
|
|
|
# {"deux"} |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
Aussi: |
|
|
Aussi: |
|
@@ -544,7 +535,7 @@ Aussi: |
|
|
\begin{itemize} |
|
|
\begin{itemize} |
|
|
\item \texttt{update()} |
|
|
\item \texttt{update()} |
|
|
\item \texttt{union()} |
|
|
\item \texttt{union()} |
|
|
\item \texttt{intersection()} |
|
|
|
|
|
|
|
|
\item \texttt{difference()} |
|
|
\end{itemize} |
|
|
\end{itemize} |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
@@ -553,7 +544,17 @@ Aussi: |
|
|
\begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} |
|
|
\begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} |
|
|
Jeu du pendu |
|
|
Jeu du pendu |
|
|
\end{beamercolorbox} |
|
|
\end{beamercolorbox} |
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{Avant de commencer à coder} |
|
|
|
|
|
|
|
|
|
|
|
Coder sans réfléchir nuit à la qualité du code. |
|
|
|
|
|
|
|
|
|
|
|
\vfill |
|
|
|
|
|
|
|
|
|
|
|
Prenons le temps de la réflexion! |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -563,11 +564,11 @@ Aussi: |
|
|
\begin{itemize} |
|
|
\begin{itemize} |
|
|
\item Lire les mots possibles depuis un fichier texte |
|
|
\item Lire les mots possibles depuis un fichier texte |
|
|
\item Choisir un mot au hasard |
|
|
\item Choisir un mot au hasard |
|
|
\item Afficher un "hint" |
|
|
|
|
|
|
|
|
\item Afficher un indice ("hint") |
|
|
\item Démarrer une boucle |
|
|
\item Démarrer une boucle |
|
|
\begin{itemize} |
|
|
\begin{itemize} |
|
|
\item Demander une lettre |
|
|
\item Demander une lettre |
|
|
\item Afficher le "hint" mis à jour |
|
|
|
|
|
|
|
|
\item Afficher l'indice mis à jour |
|
|
\item Vérfier si le jeu est fini |
|
|
\item Vérfier si le jeu est fini |
|
|
\item Repartir au début de la boucle |
|
|
\item Repartir au début de la boucle |
|
|
\end{itemize} |
|
|
\end{itemize} |
|
@@ -575,13 +576,24 @@ Aussi: |
|
|
|
|
|
|
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{Une liste de mots Français} |
|
|
|
|
|
|
|
|
|
|
|
À télecharger ici: |
|
|
|
|
|
|
|
|
|
|
|
\url{https://github.com/E2L/cours-python/blob/master/sources/pendu.txt}. |
|
|
|
|
|
|
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Une fonction par tâche} |
|
|
\frametitle{Une fonction par tâche} |
|
|
|
|
|
|
|
|
\begin{itemize} |
|
|
\begin{itemize} |
|
|
\item \texttt{read\_words()} |
|
|
\item \texttt{read\_words()} |
|
|
\item \texttt{choose\_word()} |
|
|
\item \texttt{choose\_word()} |
|
|
\item \texttt{display\_hint()} |
|
|
|
|
|
|
|
|
\item \texttt{display\_indice()} |
|
|
\item \texttt{has\_won()} |
|
|
\item \texttt{has\_won()} |
|
|
\end{itemize} |
|
|
\end{itemize} |
|
|
|
|
|
|
|
@@ -593,21 +605,43 @@ Aussi: |
|
|
\item Une liste pour les mots dans le fichier |
|
|
\item Une liste pour les mots dans le fichier |
|
|
\item Un ensemble pour les bonnes lettre devinées |
|
|
\item Un ensemble pour les bonnes lettre devinées |
|
|
\end{itemize} |
|
|
\end{itemize} |
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{C'est parti!} |
|
|
|
|
|
|
|
|
|
|
|
Le moment est venu d'écrire le code. |
|
|
|
|
|
|
|
|
|
|
|
Les sources sont sur GitHub: |
|
|
|
|
|
|
|
|
|
|
|
\url{https://github.com/E2L/cours-python}. \\~\\ |
|
|
|
|
|
|
|
|
|
|
|
Mais il vaut mieux recopier le code vous-mêmes. |
|
|
|
|
|
|
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{Implémentation: lire un fichier} |
|
|
\frametitle{Implémentation: lire un fichier} |
|
|
|
|
|
|
|
|
\begin{itemize} |
|
|
\begin{itemize} |
|
|
\item \texttt{open()} renvoie un "objet fichier" |
|
|
\item \texttt{open()} renvoie un "objet fichier" |
|
|
\item \texttt{read()} lit le fichier \textbf{en entier} et retourne une string |
|
|
|
|
|
|
|
|
\item \texttt{file.read()} lit le fichier \textbf{en entier} et retourne une string |
|
|
|
|
|
\item \texttt{file.close()} ferme le fichier |
|
|
\end{itemize} |
|
|
\end{itemize} |
|
|
|
|
|
|
|
|
|
|
|
\begin{alertblock}{Note} |
|
|
|
|
|
N'oubliez pas de fermer tous les fichiers que vous ouvrez! |
|
|
|
|
|
\end{alertblock} |
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{Implémentation: lire un fichier} |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
def read_words(): |
|
|
def read_words(): |
|
|
stream = open("noms.txt") |
|
|
|
|
|
|
|
|
stream = open("pendu.txt") |
|
|
contents = stream.read() |
|
|
contents = stream.read() |
|
|
stream.close() |
|
|
stream.close() |
|
|
words = splitlines() |
|
|
words = splitlines() |
|
@@ -620,11 +654,15 @@ def read_words(): |
|
|
\frametitle{Choisir un mot au hasard dans la liste} |
|
|
\frametitle{Choisir un mot au hasard dans la liste} |
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
import random # remember me? |
|
|
import random # remember me? |
|
|
|
|
|
|
|
|
def choose_word(words): |
|
|
def choose_word(words): |
|
|
n = len(words) |
|
|
n = len(words) |
|
|
index = random.randint(0, n-1) |
|
|
index = random.randint(0, n-1) |
|
|
return words[index] |
|
|
return words[index] |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
|
|
|
|
|
|
|
|
|
Rappel: les index commencent à zéro et se terminent à \texttt{len - 1}. |
|
|
|
|
|
|
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
@@ -649,11 +687,13 @@ _ac__ |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
\begin{frame}[fragile] |
|
|
\frametitle{L'utilisateur a-t-il gagné?} |
|
|
|
|
|
|
|
|
\frametitle{Find de partie} |
|
|
|
|
|
|
|
|
L'utilisateur a gagné si toutes les lettres ont |
|
|
|
|
|
|
|
|
Le joueur a gagné si toutes les lettres ont |
|
|
été devinées: |
|
|
été devinées: |
|
|
|
|
|
|
|
|
|
|
|
\vfill |
|
|
|
|
|
|
|
|
\begin{lstlisting} |
|
|
\begin{lstlisting} |
|
|
def has_won(word, letters): |
|
|
def has_won(word, letters): |
|
|
for letter in word: |
|
|
for letter in word: |
|
@@ -697,7 +737,24 @@ main() # ne pas oublier de l'appeler! |
|
|
\end{lstlisting} |
|
|
\end{lstlisting} |
|
|
\end{frame} |
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}[fragile] |
|
|
|
|
|
\frametitle{Pour la prochaine fois} |
|
|
|
|
|
|
|
|
|
|
|
Notez que le jouer \textbf{ne peut pas perdre}. |
|
|
|
|
|
|
|
|
|
|
|
\vfill |
|
|
|
|
|
|
|
|
|
|
|
Si vous le souhaitez, essayer d'adapter le code pour limiter le nombre d'essais: |
|
|
|
|
|
|
|
|
|
|
|
\begin{itemize} |
|
|
|
|
|
\item Afficher le nombre d'essais restant à chaque coup |
|
|
|
|
|
\item Afficher la réponse et un message d'erreur si le jouer a dépassé le |
|
|
|
|
|
nombre maximum d'essais. |
|
|
|
|
|
\end{itemize} |
|
|
|
|
|
|
|
|
|
|
|
Envoyez-moi vos solutions à d.merej@gmail.com! |
|
|
|
|
|
|
|
|
|
|
|
\end{frame} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end{document} |
|
|
\end{document} |