diff --git a/sessions/python-02.tex b/sessions/python-02.tex index f3a026f..454d1ab 100644 --- a/sessions/python-02.tex +++ b/sessions/python-02.tex @@ -16,21 +16,13 @@ \begin{document} -\frame{\titlepage} - -\begin{frame} - -\frametitle{Session 2} - -\end{frame} - \begin{frame} Note: \\~\\ +Les sources sont sur GitHub: -Les sources sont -\href{https://github.com/E2L/cours-python/tree/master/sources}{sur GitHub}. \\~\\ +\url{https://github.com/E2L/cours-python/tree/master/sources}. \\~\\ Mais il vaut mieux recopier le code vous-mêmes. @@ -43,67 +35,65 @@ Mais il vaut mieux recopier le code vous-mêmes. \frametitle{Plan} \begin{itemize} - \item Retour sur le chapitre 1 - \item Structures de données + \item Retours sur le chapitre 1 \item Fonctions + \item Structures de données \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{Retour sur input()} - + \centering + \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} + Retours sur le chapitre 1 + \end{beamercolorbox} +\end{frame} +\begin{frame}[fragile] + \frametitle{Retour sur les strings} \begin{lstlisting} -# A adapter -import random -secret = random.randint() -print("Devine le nombre auquel je pense") -while True: - reponse = input("Ta reponse: ") - response = int(response) - ... +>>> text = "Je suis un message\nSur deux lignes") +>>> print(text) +Je suis un message +Sur deux lignes \end{lstlisting} \end{frame} - - \begin{frame}[fragile] - \frametitle{Retour sur print} + \frametitle{Concaténation implicite} \begin{lstlisting} ->>> a = 1 ->>> b = 2 ->>> print("a is", a, "b is", b) -a is 1, b is 2 + + >>> text = "Je suis une " "longue" " string" + >>> text + 'Je suis une longue string' \end{lstlisting} -\begin{itemize} - \item On peut fournir plusieurs valeurs, séparées par des virgules - \item \textit{print()} insère des espaces - \item et va à la ligne -\end{itemize} +\begin{alertblock}{Note} + A double tranchant ... +\end{alertblock} + \end{frame} -\begin{frame}[fragile] - \frametitle{Retour sur print (2)} +\begin{frame}[fragile] + \frametitle{Concaténer des strings (2)} \begin{lstlisting} -a = 1 -b = 2 -print("a=", 1, "b=2", sep="", end="") +message = ( + "ligne 1\n" + "ligne 2\n" +) \end{lstlisting} -\end{frame} +Les parenthèse permettent d'aller à la ligne dans le code :) -\begin{frame}[fragile] - \frametitle{Retour sur les strings} \end{frame} + \begin{frame}[fragile] \frametitle{Répéter une string} @@ -134,118 +124,229 @@ Marche aussi avec des "triples-simple-quotes", mais c'est moins lisible :P +\begin{frame}[fragile] + \frametitle{Retour sur input()} +On peut afficher un message avant de lire l'entrée utilisateur. +\begin{lstlisting} +# A adapter +import random +secret = random.randint() +print("Devine le nombre auquel je pense") +while True: + reponse = input("Ta reponse: ") + response = int(response) + ... +\end{lstlisting} -%--- -%# Concaténer des strings +\end{frame} - %!python - %message = ( - %"Première ligne\n" - %"Deuxième ligne\n" - %) +\begin{frame}[fragile] + \frametitle{Retour sur print()} -%Les parenthèse permettent d'aller à la ligne dans le code :) +On peut spécifier le caractère de fin. \textbackslash n par défaut. -%--- +\begin{lstlisting} +# Dans hello.py +print("Bonjour", end=" ") +print("monde", end="!\n") +\end{lstlisting} -%# Slicer des strings +\begin{lstlisting} +$ python hello.py +Bonjour monde! +\end{lstlisting} - %!pycon - %>>> message = "Bonjour, monde !" - %>>> message[0] # ça commence à zéro - %"B" - %>>> message[15] - %"!" - %>>>> message[-1] # compter à l'envers - %"!" +\end{frame} -%--- -%# Slicer des strings (2) +\begin{frame}[fragile] + \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} + Fonctions + \end{beamercolorbox} +\end{frame} - %!pycon - %>>> message = "Bonjour, monde !" - %>>> message[1:4] # début, fin - %'onj' - %>>> message[:7] # début implicite - %'Bonjour' - %>>> message[9:-2] # fin négative - %'monde' -%--- +\begin{frame}[fragile] + \frametitle{Sans arguments} -%# Listes +\begin{lstlisting} +def say_hello(): + print("Hello") -%--- +say_hello() +\end{lstlisting} -%# Créer une liste +\vfill - %!pycon - %>>> my_list = [] # liste vide - %>>> primes = [2, 3, 5, 7, 11] # liste d'entiers +Notez l'utilisation des parenthèses pour \emph{appeler} la fonction -%--- +\end{frame} -%# Listes hétérogènes -%On peut mettre des types différents dans une même liste: +\begin{frame}[fragile] + \frametitle{Définition simple} - %!pycon - %>>> pommes_et_carottes = [True, 2, "three"] +\begin{lstlisting} +def add(a, b): + return a + b -%Et même des listes dans des listes: +a = 1 +b = 2 +c = add(a, b) +print(c) +\end{lstlisting} - %!pycon - %>>> liste_de_liste = [[1, 2, 3], ["one", "two", "three"]] +\end{frame} -%---- +\begin{frame}[fragile] + \frametitle{Paramètres nommés} +\begin{lstlisting} +def greet(name, shout=False): + result = "Hello, " + result += name + if shout: + result += "!" + return result + +>>> greet("John") +'Hello, John' + +>>> greet("Jane", shout=True) +'Hello, Jane!' +\end{lstlisting} + + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Note} +\texttt{print()} est une fonction :) +\end{frame} + + +\begin{frame}[fragile] + \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title} + Structures de données + \end{beamercolorbox} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Créer une liste} +\begin{lstlisting} -%# Slicer des listes +>>> ma_liste = list() # liste vide +>>> ma_liste = [] # aussi une liste vide +>>> ma_liste = [1, 2, 3] # trois entiers -%Même principe que pour les strings! +\end{lstlisting} + +\vfill + +\begin{alertblock}{Note} + \texttt{list()} est \textbf{aussi} une fonction :) +\end{alertblock} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Listes hétérogènes} - %!pycon - %>>> liste = [1, 2, 3] - %>>> liste[0:2] - %[1, 2] +On peut mettre des types différents dans une même liste: -%--- +\begin{lstlisting} +>>> pommes_et_carottes = [True, 2, "three"] +\end{lstlisting} -%# Modifier une liste +\vfill +Et même des listes dans des listes: - %!pycon - %>>> liste = [1, 2, 3] - %>>> liste[1] = 4 - %>>> liste - %[1, 4, 3] +\begin{lstlisting} +>>> liste_de_liste = [[1, 2], ["one", "two"]] +\end{lstlisting} -%*Attention*: ça ne marche pas avec les strings: +\end{frame} - %!pycon - %>>> message = "Bonjour, monde !" - %>>> message[-1] = "?" - %TypeError: 'str' object does not support item assignment -%--- +\begin{frame}[fragile] + \frametitle{Connaître la taille d'une liste} +Avec la fonction \texttt{len()}: -%# Boucles for +\vfill -%Itérer sur les éléments d'une liste: +\begin{lstlisting} +>>> liste_vide = [] +>>> len(liste_vide) +0 +>>> autre_liste = [1, 2, 3] +>>> len(autre_liste) +3 +\end{lstlisting} +\end{frame} - %!python - %names = ["Alice", "Bob", "Charlie"] - %for name in names: - %print("Bonjour", name) - %Bonjour Alice - %Bonjour Bob - %Bonjour Charlie -%--- +\begin{frame}[fragile] + \frametitle{Indexer une liste} + +\begin{lstlisting} + +>>> liste = [1, 2, 3] +>>> liste[0] # ca commence a zero +1 +>>> liste[4] # erreur! +\end{lstlisting} + +\vfill + +Astuce: l'index maximal est \texttt{len(list) -1}. Retenez-le :) + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Modifer une liste} +\begin{lstlisting} +>>> liste = [1, 2, 3] +>>> liste[1] = 4 +>>> liste +[1, 4, 3] +\end{lstlisting} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Itérer sur les éléments d'une liste} +\begin{lstlisting} +names = ["Alice", "Bob", "Charlie"] +for name in names: + print("Bonjour", name) + +Bonjour Alice +Bonjour Bob +Bonjour Charlie +\end{lstlisting} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Test de présence} + +Avec le mot-clé \texttt{in}: + +\vfill + +\begin{lstlisting} +>>> fruits = ["pomme", "banane"] +>>> "pomme" in fruits +True +>>> "orange" in fruits +False +\end{lstlisting} + +\end{frame} \end{document}