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