\makeatletter
\@ifundefined{complet}
{\documentclass[10pt]{report}
\title{Python}
\newcommand{\categorie}{Python}
\input{latex_entete_perso}

\begin{document} %Cours

\setcounter{chapter}{1}
% xelatex -shell-escape cours_python
}
{}
\makeatother

\IfFileExists{mm_principe.png}{}{\write18{wget https://doc.infoforall.fr/activite/python/images/dictionnaire/mm_principe.png}}

\chapter{Expressions numériques}

\section{Expression comportant un opérateur}

\begin{multicols}{2}


\subsection{DEFINITIONS}

Une \remarque{expression} caractérise une séquence de \remarque{valeurs}
associées à des \remarque{opérateurs}.

L'interpréteur Python évalue l'expression et fournit sa valeur associée. Cette action se nomme une \remarque{évaluation}.

Cas simple~:
~
\small{
\begin{minted}{python}
>>> 4 + 5
9
\end{minted}
}

\small{
\begin{itemize}
\item {4} et {5} sont des valeurs.
\item {+} est un opérateur.
\item {4} {+} {5} est une expression.
\item {9} est la valeur de l'évaluation.
\end{itemize}
}

Les {opérations arithmétiques classiques} sont symbolisées de cette
façon en Python~:
\small{
\begin{itemize}
\item  {$+$} addition, {$-$} soustraction,
\item  {$*$} multiplication, {$/$} division,
\item  {$**$} puissance.
\end{itemize}
}


\subsection{Priorité}

L'évaluation d'une expression est \gras{séquentielle et progressive}
l'interpréteur Python effectue certaines opérations en priorité.

Voici \gras{les priorités des opérateurs}, du plus prioritaire au moins prioritaire~:

\begin{enumerate}
\item les parenthèses d'abord.
\item ensuite, l'opérateur de puissance {**}
\item puis, les opérateurs {*} {/}
\item enfin, les opérateurs {+} {-}
\item En cas d'égalité de priorité : le plus à
  gauche d'abord
\end{enumerate}

\remarque{Exemples}

\small{
\begin{minted}{python}
10 + (5 + 3) * 2  # parenthèses
10 + 8 * 2        # multiplication
10 + 16           # addition
26

5 + 10 / 2 * 3    # division
5 + 5.0 * 3       # multiplication
5 + 15.0          # addition
20.0
\end{minted}
}

\subsection{Quotient et reste de division}

\paragraph{Rappels} sur les divisions euclidiennes : il s'agit de diviser un nombre a par un nombre b, en trouvant~:

\begin{itemize}
\item le \gras{quotient}, c'est à dire le nombre de paquets égaux qu'on peut faire en divisant a par b.
\item le \gras{reste}, c'est à dire le nombre d'éléments restants après création des paquets.
\item \gras{Exemple} avec la division euclidienne de 10 par 5~: quotient de 2 et reste de 0.

\opidiv[displayintermediary=all,voperation=top]{10}{5}

\end{itemize}


\paragraph{Opérateur Python \fo{//}}

La syntaxe pour obtenir le \gras{quotient} de la division
entière de 10 par 5 est {10 // 5}.

\small{
\begin{minted}{python}
>>> 10 // 5
2
\end{minted}
}

\paragraph{Opérateur Python \fo{\%}}

La syntaxe pour obtenir le \gras{reste} de la division
entière de 10 par 5 est {10 \% 5}.

\small{
\begin{minted}{python}
>>> 10 % 5
0
\end{minted}
}

\paragraph{Exemple}

\opidiv[displayintermediary=all,voperation=top]{14}{3}

\small{
\begin{minted}{python}
>>> 14 % 3             >>> 14 % 3
4                      2
\end{minted}
}

\paragraph{Priorité}

Les opérateurs \gras{//} et \gras{\%} possèdent la même priorité que la
multiplication.

\small{
\begin{minted}{python}
1407 % 5 // 2          1407 // 2 \% 5
2 // 2                 703 % 5
1                      3
\end{minted}
}

\end{multicols}

\newpage

\section{Application à la résolution de problèmes}

\begin{multicols}{3}

\subsection{Extraire les chiffres}

\subsubsection{Chiffre u de l'unité}

\small{
\begin{minted}{python}
>>> 1234 % 10       
4
>>> 489 % 10
9
\end{minted}
}

\subsubsection{Chiffre d de la dizaine}

\small{
\begin{minted}{python}
>>> 1234 // 10 % 10    
3
>>> 489 // 10 % 10
8
\end{minted}
}

\subsubsection{Chiffre c de la centaine}

\small{
\begin{minted}{python}
>>> 1234 // 100 % 10   
2
>>> 489 // 100 % 10
4
\end{minted}
}


\subsection{Position d'une case}

\subsubsection{Description du plateau}

16 cases numérotées de 0 à 15.

\small{
\begin{minted}{python}
#      C0 C1 C2 C3
# L0   00 01 02 03
# L1   04 05 06 07
# L2   08 09 10 11
# L3   12 13 14 15 
\end{minted}
}

\subsubsection{Numéro de ligne}

Il y a 4 cases par ligne et les cases commencent à 0.

Il suffit de récupérer le quotient de la division euclidienne du numéro de la case par 4.

\small{
\begin{minted}{python}
>>> 4 // 4  
1
>>> 7 // 4
1
\end{minted}
}

\subsubsection{Numéro de colonne}

Il y a 4 cases par ligne et les cases commencent à 0.

Il suffit de récupérer le reste de la division euclidienne du numéro de la case par 4.

\small{
\begin{minted}{bat}
>>> 4 % 4  >>> 7 % 4
0          3
\end{minted}
}

\end{multicols}


\section{Dictionnaire et interface graphique}

\begin{multicols}{2}

\subsection{Définition d'un dictionnaire}

Un dictionnaire est un \gras{tableau associatif}. Il comporte des cases qui portent un nom et possèdent un contenu. On nomme~:

\begin{itemize}
\item \gras{clé (key}) le nom de la case.
\item \gras{valeur (value)} le contenu de la case.
\end{itemize}

\small{
\begin{minted}{python}
Clé     "Alice"   "Bob"   "Charlie"
Valeur     13       8         12
\end{minted}
}

\subsection{Déclaration d'un dictionnaire}

\begin{itemize}
\item Les éléments délimiteurs sont les accolades \fo{\{\}}.
\item On fournit un couple \gras{(cle, valeur)} en utilisant la syntaxe Python suivante : \fo{cle: valeur}.
\item Les couples sont séparés par une \gras{virgule}.
\end{itemize}

\paragraph{Exemple} une ligne ou multiligne

\small{
\begin{minted}{python}
ds = {"Alice": 13, "Bob": 8, "Charlie": 12}
\end{minted}
}

\small{
\begin{minted}{python}
ds = {
    "Alice": 13,
    "Bob": 8,
    "Charlie": 12
    }
\end{minted}
}

\subsection{Lecture, accéder à une valeur}

On accéde à une valeur en tapant le \gras{nom du dictionnaire suivi de la clé entre crochets}.

\small{
\begin{minted}{python}
>>> ds = {"Alice": 13, "Bob": 8, "Charlie": 12}
>>> ds["Bob"]
8

>>> ds["Bob l'éponge"]
KeyError: "Bob l'éponge"
\end{minted}
} 

\begin{figure}[H]
\centering
\includegraphics[height=3cm]{mm_principe.png}
\caption{Principe du dictionnaire}
\label{Principe-dico}
\end{figure}

\end{multicols}

\input{licence}

\makeatletter
\@ifundefined{complet}
{\end{document}}

{}
\makeatother

