\documentclass[11pt,a4paper]{../../template/template_cours}

\usepackage{minted}

\title{TP noté sur Python}
\author{Adrian Amaglio}
\def\thelevel{NSI}
\def\thesequence{Programmation}

\begin{document}
Durée : 1h

% ---
\section{Dessiner des pyramides}
L’objectif de cette partie est de concevoir un programme python capable d’afficher des pyramides de texte. Voici par exemple une pyramide d’étoiles de 4 étages :
\begin{verbatim}
*
* *
* * *
* * * *
\end{verbatim}
Nous allons pour cela créer une fonction affichant une ligne de longueur donnée et d’un symbole donné puis une fonction, utilisant la précédente, capable d’afficher une pyramide de hauteur donnée.
Cette partie sera à faire dans un fichier nommé \textit{pyramide.py}.

\begin{exercice}
    Créer une fonction appelée \textit{ligne}, prenant en paramètre un symbole (type texte ou \textit{str} en python) et une taille de ligne.\\
    Cette fonction affichera le symbole autant de fois que demandé dans le paramètre taille.\\
    \textit{Aide :} Pour afficher du texte sans retour à la ligne on ajoute un paramètre \textit{end} à print :\\
    \begin{minted}{python}
print('Bonsoir !', end='')
    \end{minted}
    Tester la fonction ligne avec plusieurs valeurs pour vérifier son bon fonctionnement. Voici des exemples de test :
    \begin{minted}{python}
ligne('*', 10)
ligne('.', 1)
ligne('o', 5)
    \end{minted}
\end{exercice}

\begin{exercice}
    Créer une fonction \textit{pyramide}, qui prend en paramètre une hauteur et un symbole et qui dessine la pyramide correspondante en utilisant la fonction \textit{ligne}.
\end{exercice}

\begin{exercice}
    Dessinez trois pyramides avec des symboles et des hauteurs différentes.
\end{exercice}


% ---
\section{Jeu de morpion}
L’objectif de cette partie est de concevoir un jeu de morpion (ou tic-tac-toe).
Cette partie sera à faire dans un fichier nommé \textit{morpion.py}.\\
Le plateau de jeu sera représenté par une liste contenant trois liste (une pour chaque ligne du plateau).
Chaque ligne sera représentée par une liste de trois textes (str) qui peuvent avoir trois valeurs distinctes :
\begin{description}
    \item[' '] Si la case est vide
    \item['x'] Si la case contient une croix
    \item['o'] Si la case contient un rond
\end{description}


\begin{exercice}
    En haut de votre fichier \textit{morpion.py}, collez la ligne de python suivante :
    \begin{minted}{python}
plateau = [ [' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' '] ]
    \end{minted}
    Vérifiez que votre fichier s’exécute bien et n’affiche rien.
\end{exercice}

\begin{exercice}
    Créer une fonction nommée \textit{afficher} qui affiche en texte le plateau de jeu. Elle prendra le plateau de jeu en paramètre.\\
\end{exercice}

\begin{exercice}
    Créer une fonction nommée \textit{jouer} qui prend quatre paramètres :
    \begin{itemize}
        \item Le plateau de jeu
        \item Le symbole à jouer (x ou o)
        \item La ligne où on souhaite jouer
        \item La colonne où on souhaite jouer
    \end{itemize}
    Cette fonction modifiera le plateau pour mettre le symbole à l’emplacement voulu.
    Aucune vérification n’est faite à cette étape du programme, les coups de triche sont possibles.
\end{exercice}

\begin{exercice}
    Testez vos deux fonctions précédentes en les appelant avec des valeurs choisies.
    Voici un exemple de test à modifier et enrichir :
    \begin{minted}{python}
afficher(plateau)
jouer(plateau, 'x', 0, 0)
afficher(plateau)
    \end{minted}
\end{exercice}

\begin{exercice}
    Modifier la fonction \textit{jouer} pour qu’elle vérifie de le coup demandé est valide.
    La fonction doit maintenant retourner True si le coup a été joué et False si il est invalide.\\
    Tester à nouveau la fonction.
\end{exercice}

\begin{exercice}
    Créer une fonction \textit{partie} qui prend le plateau en paramètre et qui déroule une partie. Voici le principe de base.
    \begin{itemize}
        \item Demander au premier joueur où il souhaite jouer
        \item Appeler la fonction jouer avec les paramètres correspondants
        \item Demander au second joueur où il souhaite jouer
        \item Appeler la fonction jouer avec les paramètres correspondants
    \end{itemize}
    Vérifiez que votre fonction :
    \begin{itemize}
        \item Gère correctement les cas où le coup est invalide
        \item Utilise bien le symbole 'x' pour un joueur et 'o' pour l’autre
    \end{itemize}

\end{exercice}

\begin{exercice}
    Créer une fonction \textit{victoire} qui prend le plateau en paramètre et retourne le symbole 'x' si trois x sont alignés, 'o' si trois o sont alignés ou ' ' si aucun joueur n’a gagné.
    Utilisez cette fonction dans votre fonction \textit{partie}
    \end{exercice}
\end{document}
