Browse Source

Proofread 2nd session

master
Dimitri Merejkowsky 6 years ago
parent
commit
8e0df47f42
1 changed files with 99 additions and 42 deletions
  1. +99
    -42
      sessions/python-02.tex

+ 99
- 42
sessions/python-02.tex View File

@@ -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}