DM1

publicité
Gaudino, casier 5
P.C.S.I. 834
Devoir Maison d’Info
2015/2016
À rendre le jeudi 12 novembre, sur papier. Évidemment, la copie peut être une impression d’un code tapé à l’ordinateur.
Le but est de programmer un petit logiciel (simpliste), pour s’entraîner au calcul mental. L’ordinateur tire au sort
deux entiers et une opération (parmi +,×,−, et pas /), pose la question, teste la réponse, demande si on veut rejouer.
Par la suite, on rajoute quelques fioritures : un chronomètre, un système de score, etc.
L’interface va être extrêmement sommaire : par la console, et pas par interface graphique (ce ne sera pas très beau).
On va avoir besoin de deux modules :
– le module radom qui apporte à Python la possibilité d’utiliser la hasard. En particulier, la fonction random.randint(0,n)
qui renvoie un entier pris au hasard entre 0 et n compris (n entier donné par sa valeur numérique).
– le module time qui apporte à Python la possibilité d’utiliser la temps. En particulier, la fonction time.clock() qui
renvoie quelque chose qui ressemble à l’heure exacte. Comme nous allons mesurer des durées, peu importe l’heure,
c’est l’écart entre deux heures qui nous servira.
On découpe le sujet en de nombreuses sous-questions, avec une utilisation importante des fonctions : c’est une bonne
habitude à prendre. D’autres découpages sont possibles (et certains sont bien plus intelligents en fait, mais moins
pédagogiques).
1. Écrire une fonction nommée : OnContinue, qui ne prend aucun argument, qui renvoie un booléen, et qui fait la
chose suivante : elle demande si le joueur veut continuer à jouer.
Attention, en Python, une fonction prend toujours une parenthèse, éventuellement vide en l’absence d’argument.
Ici, on écrira donc def OnContinue():
2. Écrire une fonction PoseQuestion qui prend trois entiers en argument a, b, c, qui pose la question à l’utilisateur,
et renvoie la réponse fournie. Ces arguments seront les deux entiers de l’opération (a et b) et un entier (c) entre
0 et 2 qui code le type d’opération (0 est +, 1 est ×, 2 est −).
3. Écrire une fonction TesteReponse qui prend quatre entiers en argument a, b, c, d et qui renvoie un booléen. a, b, c
représentent les mêmes choses qu’à la question qui précède, d représente la réponse fournie. Le booléen renvoyé
dit si le joueur s’est trompé. En plus, la fonction affichera (affichera et pas renverra) succès ou échec (sans
accent).
4. Écrire le code suivant : on tire au sort deux entiers (entre 0 et 99) et une opération (donc un entier entre 0 et
2), on pose la question, on teste. Écrire le code pour que le joueur joue exactement 5 fois.
5. Modifier ce code pour que le joueur demande à rejouer (ou pas). La boucle est potentiellement infinie (si le joueur
répond toujours oui).
6. Modifier ce code pour intégrer un décompte des succès. À la fin de la partie, on affichera le taux de réussite.
7. Dans l’optique de la question suivante, réfléchir au chronométrage des réponses (question volontairement vague).
8. Modifier ce code pour intégrer un décompte plus fin des succès. Chaque échec rapporte 0 point. Un succès en
moins de 2 secondes en rapporte 5, en moins de 3 s rapporte 2, en moins de 4 s rapporte 1 (et un succès trop
lent ne rapporte donc rien : esprit concours). À la fin de la partie, on affichera la note obtenue, sur 20 (20 =
uniquement des succès en moins de 1 s).
9. Pourquoi ne pas avoir programmé le cas de la division ?
1
Téléchargement