\documentclass[a4paper,10pt]{article}
\usepackage{myXsim}
\usepackage{minted}

\author{Benjamin Bertrand}
\title{Python et micro:bit - Cours}
\date{Septembre 2022}

\pagestyle{empty}

\begin{document}

\maketitle

\setcounter{section}{1}
\section{Corpus élémentaire de Python}

\subsection{Affectation}

\begin{definition}{Affectation}
    \textbf{L'affectation de variable}, représenté en python par le symbole \texttt{=}, est l'opération qui va associé une valeur (pas nécessairement numérique) à un nom de variable.
\end{definition}

Pour suivre l'affectation de variable, on peut compléter un tableau d'état

\begin{multicols}{2}
    \begin{minted}[bgcolor=base3,linenos]{python}
       a = 23
       a = a + 1
       b = 10
       a = b
    \end{minted}

    \begin{tabular}{|c|p{2cm}|p{2cm}|}
        \hline
        Instruction & a & b \\
        \hline
        ligne 1 & 23 & \\
        \hline
        ligne 2 & 24 & \\
        \hline
        ligne 3 & 24 & 10 \\
        \hline
        ligne 4 & 10 & 10\\
        \hline
    \end{tabular}
\end{multicols}

\subsection{Types de bases}

Vous serez amené à utiliser essentiellement 4 types de base:

\begin{center}
    \begin{tabular}{p{2cm}*{4}{p{4cm}}}
        Nom & Les entiers signés & Les flottants & Les strings & Les booléens \\
        Type & int & float & str & bool \\
        exemple &
        \mintinline[bgcolor=base3]{python}{2, -2, 0} &
        \mintinline[bgcolor=base3]{python}{2.2, -3.14} &
        \mintinline[bgcolor=base3]{python}{"2", "zaer"} &
        \mintinline[bgcolor=base3]{python}{True, False} \\

        Opérateurs &
        \texttt{+, -, *, //, \%, **}&
        \texttt{+, -, *, /,  **}&
        \texttt{+}&
        \texttt{or, and, not} \\
    \end{tabular}
\end{center}

\afaire{décrire l'action des opérateurs}


\begin{itemize}
    \item Pour connaitre le type d'une variable, on peut utiliser la fonction \mintinline{python}{type}

        \textbf{Exemple:}
        \begin{center}
            \begin{minipage}{0.5\linewidth}
                \begin{minted}[bgcolor=base3,linenos]{python}
>>> a = "aer"
>>> type(a)
str
                \end{minted}
            \end{minipage}
        \end{center}
    \item On peut transformer d'une variable avec les fonctions \mintinline{python}{int}, \mintinline{python}{float},\mintinline{python}{str}, \mintinline{python}{bool},

        \textbf{Exemples:}
        \begin{multicols}{4}
            \begin{minted}[bgcolor=base3]{python}
>>> int("2")
2
>>> int(2.2)
2
            \end{minted}

            \begin{minted}[bgcolor=base3]{python}
>>> float(2)
2.0
>>> float("2.2")
2.2
            \end{minted}

            \begin{minted}[bgcolor=base3]{python}
>>> str(2)
"2"
>>> str(2.2)
"2.2"
            \end{minted}

            \begin{minted}[bgcolor=base3]{python}
>>> bool(0)
False
>>> bool(1)
True
            \end{minted}
        \end{multicols}
        \end{center}
\end{itemize}

\subsection{Outils d'interactions}

\begin{itemize}
    \item Afficher à l'écran: on utilise la fonction \mintinline{python}{print}
        \begin{minted}[bgcolor=base3,linenos]{python}
print("Coucou")
a = 2.3
print(a)
        \end{minted}
    \item Demander une information à l'utilisateur: on utilise la fonction \mintinline{python}{input}
                \begin{minted}[bgcolor=base3,linenos]{python}
reponse = input("Quel est ton nom?")
print("Bonjour ", reponse)
                \end{minted}
    Attention la fonction \mintinline{python}{input} renvoie toujours une chaine de caractère (même si l'on rentre un nombre).
\end{itemize}

\subsection{Conditions}

Pour s'adapter le comportement d'un programme à différentes situations, on pourra utiliser les mots clés \mintinline{python}{if/elif/else}

\begin{multicols}{2}
\textbf{Exemple:}

    \begin{minted}[bgcolor=base3,linenos]{python}
age = str(input{"Quel age as tu?"})

if age < 2: # Condition 1
    print("Tu es un bébé") # block 1
elif age < 18: # Condition 2
    print("Tu n'es pas majeur") # block 2
    print("Tu peux pas passer le permis") # block2
else:
    print("Tu peux passer le permis") # block3

print("J'ai plus rien à dire")
    \end{minted}

\columnbreak

Remarques:
\begin{itemize}
    \item Seul le mot clé \mintinline{python}{if} est obligatoire.
    \item Il peut y avoir autant de \mintinline{python}{elif} que vous souhaitez
    \item À la première condition validée, uniquement le block indenté en dessous sera exécuté.
    \item Les conditions sont de type booléen (vrai ou faux). Attention, Python donne parfois des valeurs booléennes à d'autres types.
\end{itemize}
\end{multicols}


\begin{multicols}{2}
    \paragraph{Principaux opérateurs sur les \mintinline{python}{int} ou \mintinline{python}{float}}~

    \begin{tabular}{cc}
        \mintinline{python}{x == y} & \cdots \\
        \mintinline{python}{x != y} & \cdots \\
        \mintinline{python}{x < y} & \cdots \\
        \mintinline{python}{x > y} & \cdots \\
        \mintinline{python}{x <= y} & \cdots \\
        \mintinline{python}{x >= y} & \cdots \\
    \end{tabular}

    \columnbreak

    \paragraph{Principaux opérateur sur les \mintinline{python}{bool}}~

    \begin{tabular}{cc}
        \mintinline{python}{E and F} & \cdots \\
        \mintinline{python}{E or F} & \cdots \\
        \mintinline{python}{not E} & \cdots \\
    \end{tabular}

    \vfill

    \paragraph{Principaux opérateur \mintinline{python}{str}}~

    \begin{tabular}{cc}
        \mintinline{python}{c in S} & \cdots \\
    \end{tabular}
\end{multicols}
    \afaire{Décrire la comparaison effectuée par chaque opérateur}

\paragraph{Exemples}
\begin{center}
    \begin{minipage}{0.5\linewidth}
        \begin{minted}[bgcolor=base3,linenos]{python}
            >>> 3 < 5
            ...
            >>> (3 < 5) and (5 == 2*2+1)
            ...
            >>> not (5 <= 5)
            ...
            >>> "a" in "uiopup"
            ...
         \end{minted}
     \end{minipage}
\end{center}
 \afaire{Compléter l'exemple précédent avec True ou False}

\end{document}
