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

\usepackage{minted}

\title{Introduction à Python — Le jeu « Plus ou moins »}
\author{Adrian Amaglio}
\def\thesequence{Programmation}

\begin{document}
Durée : 1h\\

% ---
\section{Les règles du jeu}
Le jeu « Plus ou moins » a des règles assez simples.
Voici comment le jeu se joue sur ordinateur :
\begin{itemize}
    \item Le programme choisit un nombre entier au hasard entre 0 et 100 (par exemple 42). Le joueur doit le deviner.
    \item Le joueur propose un nombre (par exemple 55).
    \item Le programme répond « plus grand, si la proposition est inférieure au nombre à deviner, « plus petit » si la proposition est supérieur et « Gagné » si la proposition est égale. (Dans notre exemple, l’ordinateur répondra « plus petit ».
    \item Le joueur propose un nouveau nombre, jusqu’à ce qu’il ait le bon.
\end{itemize}


% ---
\section{Un nombre aléatoire}
En python, pour générer un nombre aléatoire entre 0 et 100 on a besoin des deux lignes suivantes.
\begin{minted}{python}
from random import randint
secret = randint(0,100)
\end{minted}
La variable $secret$ a maintenant pour valeur un nombre entier aléatoire !

\begin{exercice}
    Pour vérifier l’effet de la fonction d’aléatoire, exécutez ce programme Python et vérifiez qu’il affiche bien un nombre différent à chaque exécution.
    \begin{minted}{python}
from random import randint
secret = randint(0,100) # Python choisit un nombre aléatoire
print(secret) # Python va afficher le contenu de la variable "secret"
    \end{minted}
\end{exercice}


% ---
\section{Les propositions du joueur}
Pour que le joueur propose un nombre, nous allons devoir dire à notre programme d’attendre une saisie de sa part.\\
On utilise pour cela la fonction $input$.
\begin{example}
    \begin{minted}{python}
essai = int(input('Essai :'))
print(essai)
    \end{minted}
\end{example}

\begin{exercice}
    Exécutez un programme contenant les deux lignes de l’exemple précédent.\\
    Lorsqu’il vous demandera d’entrer votre essai, entrez le chiffre 9, appuyez sur la touche « entrer » et vérifier que votre chiffre s’affiche bien une seconde fois à l’écran.
\end{exercice}


% ---
\section{Afficher des messages personnalisés}
Nous allons ajouter des \textbf{conditions}.
Une condition permet d’exécuter des instructions python uniquement dans certains cas.
\begin{example}
    Par exemple, le programme suivant sert à tester si une personne est majeure :
    \begin{minted}{python}
age = 17
if age < 18:
    print('Vous êtes mineur')
elif age == 18:
    print('Vous êtes tout juste majeur')
else:
    print('Vous êtes majeur')
    \end{minted}
\end{example}
\begin{exercice}
    Exécutez le programme de l’exemple précédent. Et changez l’âge pour voir dans quels cas chaque message est affiché.
\end{exercice}


% ---
\section{Version à un essai}
\begin{exercice}
    À partir des deux exemples précédents, écrivez un programme qui :
    \begin{itemize}
        \item Tire un nombre aléatoire et le stock dans la variable $secret$.
        \item Demande à l’utilisateur d’entrer un essai.
        \item Affiche le nombre secret, pour que le joueur puisse voir s’il correspond à son essai.
    \end{itemize}
    \textbf{Faites vérifier par le professeur}
\end{exercice}


% ---
\section{Version à un essai, avec un message personnalisé}
\begin{exercice}
    Complétez votre programme pour qu’il affiche un message, comme définit dans les règles, en fonction de l’essai du joueur.
\end{exercice}


% ---
\section{Version avec trop d’essais !}
Pour que l’utilisateur puisse entrer plusieurs essais, il faudrait répéter certaines étapes du programme.\\
Pour répéter indéfiniment des instructions, on utilise une boucle infinie !
\begin{example}
    \begin{minted}{python}
while True:
    print('Bonjour')
    \end{minted}
    Le programme ci-dessus, affichera « bonjour » en continu, tant que l’on ne l’arrête pas.
\end{example}
\begin{exercice}
    Modifiez votre programme python pour que l’utilisateur puisse faire plusieurs propositions.
\end{exercice}


% On espère que les élèves arriveront là au moins
% ---
\section{Version avec tout juste ce qu’il faut d’essais}
On a maintenant un problème, le programme précédent ne s’arrête pas, même lorsque le nombre a été deviné !
La boucle infinie, est réellement infinie…\\
Il existe cependant un moyen de la stopper. Il suffit d’ajouter l’instruction « break » dans le programme.
Lorsque python exécute l’instruction « break », il arrête immédiatement la boucle !
\begin{exercice}
    Placez l’instruction « break » dans votre programme pour qu’il s’arrête en cas de victoire du joueur.\\
    Testez plusieurs fois votre programme.
\end{exercice}


% ---
\section{Afficher le nombre d’essais}
\begin{example}
    En python, on peut utiliser un compteur. C’est une variable qui contient un entier.\\
    On l’initialise à 0, c’est à dire qu’on lui donne cette valeur au début du programme, puis on augmente sa valeur de 1 dès que l’on veut compter.
    \begin{minted}{python}
compteur = 0
print(compteur) # <- affiche 0
compteur = compteur + 1
print(compteur) # <- affiche 1
    \end{minted}
\end{example}
\begin{exercice}
    Modifiez votre programme pour qu’il affiche le nombre de tentatives faites par le joueur pour deviner le nombre secret.
\end{exercice}


% ---
\section{Proposer de rejouer}
\begin{exercice}
    Modifiez votre programme pour qu’il propose de rejouer à la fin de la partie.
\end{exercice}


% ---
\section{Nombre d’essai maximal}
\begin{exercice}
    Modifiez votre programme pour qu’il fixe un nombre d’essai maximal au joueur et qu’il termine la partie lorsque celui-ci est atteint.\\
    Il peut être agréable pour le joueur que le nombre d’essais restants soit affiché à chaque tour.
\end{exercice}

% ---
\section{Difficulté réglable}
\begin{exercice}
    Modifiez votre programme pour qu’il permette au joueur de changer la valeur maximale du nombre secret et le nombre d’essais possibles.
\end{exercice}

\end{document}
