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