diff --git a/sessions/python-02.tex b/sessions/python-02.tex index d64f093..2d82856 100644 --- a/sessions/python-02.tex +++ b/sessions/python-02.tex @@ -21,12 +21,6 @@ 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} @@ -77,6 +71,8 @@ Marche aussi avec \texttt{-=}, \texttt{*=} etc. \begin{frame}[fragile] \frametitle{Retour sur les strings} +\texttt{\textbackslash n} sert à échapper les retours à la ligne: + \begin{lstlisting} >>> text = "Je suis un message\nSur deux lignes") @@ -90,6 +86,8 @@ Sur deux lignes \begin{frame}[fragile] \frametitle{Concaténation implicite} +Pas besoin de `+` pour concaténer des "littéraux". + \begin{lstlisting} >>> text = "Je suis une " "longue" " string" @@ -100,20 +98,6 @@ Sur deux lignes \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] \frametitle{Répéter une string} @@ -277,6 +261,12 @@ def greet(name, shout=False): \begin{frame}[fragile] \frametitle{Note} \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} @@ -310,14 +300,14 @@ def greet(name, shout=False): On peut mettre des types différents dans une même liste: \begin{lstlisting} ->>> pommes_et_carottes = [True, 2, "three"] +>>> pommes_et_carottes = [True, 2, "trois"] \end{lstlisting} \vfill Et même des listes dans des listes: \begin{lstlisting} ->>> liste_de_liste = [[1, 2], ["one", "two"]] +>>> liste_de_liste = [[1, 2], ["un", "deux"]] \end{lstlisting} @@ -326,7 +316,7 @@ Et même des listes dans des listes: \begin{frame}[fragile] \frametitle{Connaître la taille d'une liste} -Avec la fonction \texttt{len()}: +Avec la fonction \texttt{len()} (encore un built-in). \vfill @@ -441,7 +431,7 @@ Erreur! \begin{lstlisting} >>> message = "un deux trois" ->>> message.split() # espaces +>>> message.split() ["un", "deux", "trois"] \end{lstlisting} \end{frame} @@ -514,8 +504,8 @@ Création avec la fonction \texttt{set()}: >>> sac = set() >>> 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 \end{lstlisting} \end{frame} @@ -523,20 +513,21 @@ Création avec la fonction \texttt{set()}: \begin{frame}[fragile] \frametitle{Ajout d'un élement dans un ensemble} \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{frame} \begin{frame}[fragile] \frametitle{Autres opérations} \begin{lstlisting} ->>> s1 = {"one", "two"} ->>> s2 = {"one", "three"} -# {"two"} +>>> s1 = {"un", "deux"} +>>> s2 = {"deux", "trois"} +>>> s2.intersection(s1) +# {"deux"} \end{lstlisting} Aussi: @@ -544,7 +535,7 @@ Aussi: \begin{itemize} \item \texttt{update()} \item \texttt{union()} - \item \texttt{intersection()} + \item \texttt{difference()} \end{itemize} \end{frame} @@ -553,7 +544,17 @@ Aussi: \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} Jeu du pendu \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} @@ -563,11 +564,11 @@ Aussi: \begin{itemize} \item Lire les mots possibles depuis un fichier texte \item Choisir un mot au hasard - \item Afficher un "hint" + \item Afficher un indice ("hint") \item Démarrer une boucle \begin{itemize} \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 Repartir au début de la boucle \end{itemize} @@ -575,13 +576,24 @@ Aussi: \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] \frametitle{Une fonction par tâche} \begin{itemize} \item \texttt{read\_words()} \item \texttt{choose\_word()} - \item \texttt{display\_hint()} + \item \texttt{display\_indice()} \item \texttt{has\_won()} \end{itemize} @@ -593,21 +605,43 @@ Aussi: \item Une liste pour les mots dans le fichier \item Un ensemble pour les bonnes lettre devinées \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} + \begin{frame}[fragile] \frametitle{Implémentation: lire un fichier} \begin{itemize} \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} +\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} def read_words(): - stream = open("noms.txt") + stream = open("pendu.txt") contents = stream.read() stream.close() words = splitlines() @@ -620,11 +654,15 @@ def read_words(): \frametitle{Choisir un mot au hasard dans la liste} \begin{lstlisting} import random # remember me? + def choose_word(words): n = len(words) index = random.randint(0, n-1) return words[index] \end{lstlisting} + +Rappel: les index commencent à zéro et se terminent à \texttt{len - 1}. + \end{frame} \begin{frame}[fragile] @@ -649,11 +687,13 @@ _ac__ \end{frame} \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: +\vfill + \begin{lstlisting} def has_won(word, letters): for letter in word: @@ -697,7 +737,24 @@ main() # ne pas oublier de l'appeler! \end{lstlisting} \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}