瀏覽代碼

Wip session 2

23 pages done, 20 to go
master
Dimitri Merejkowsky 5 年之前
父節點
當前提交
d5eb141801
共有 1 個文件被更改,包括 216 次插入115 次删除
  1. +216
    -115
      sessions/python-02.tex

+ 216
- 115
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}