| @@ -16,21 +16,13 @@ | |||||
| \begin{document} | \begin{document} | ||||
| \frame{\titlepage} | |||||
| \begin{frame} | |||||
| \frametitle{Session 2} | |||||
| \end{frame} | |||||
| \begin{frame} | \begin{frame} | ||||
| Note: \\~\\ | 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. | 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} | \frametitle{Plan} | ||||
| \begin{itemize} | \begin{itemize} | ||||
| \item Retour sur le chapitre 1 | |||||
| \item Structures de données | |||||
| \item Retours sur le chapitre 1 | |||||
| \item Fonctions | \item Fonctions | ||||
| \item Structures de données | |||||
| \end{itemize} | \end{itemize} | ||||
| \end{frame} | \end{frame} | ||||
| \begin{frame}[fragile] | \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} | \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{lstlisting} | ||||
| \end{frame} | \end{frame} | ||||
| \begin{frame}[fragile] | \begin{frame}[fragile] | ||||
| \frametitle{Retour sur print} | |||||
| \frametitle{Concaténation implicite} | |||||
| \begin{lstlisting} | \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} | \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} | \end{frame} | ||||
| \begin{frame}[fragile] | |||||
| \frametitle{Retour sur print (2)} | |||||
| \begin{frame}[fragile] | |||||
| \frametitle{Concaténer des strings (2)} | |||||
| \begin{lstlisting} | \begin{lstlisting} | ||||
| a = 1 | |||||
| b = 2 | |||||
| print("a=", 1, "b=2", sep="", end="") | |||||
| message = ( | |||||
| "ligne 1\n" | |||||
| "ligne 2\n" | |||||
| ) | |||||
| \end{lstlisting} | \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} | \end{frame} | ||||
| \begin{frame}[fragile] | \begin{frame}[fragile] | ||||
| \frametitle{Répéter une string} | \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} | \end{document} | ||||