Przeglądaj źródła

Proofread 2nd session

master
Dimitri Merejkowsky 6 lat temu
rodzic
commit
8e0df47f42
1 zmienionych plików z 99 dodań i 42 usunięć
  1. +99
    -42
      sessions/python-02.tex

+ 99
- 42
sessions/python-02.tex Wyświetl plik

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