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