Author: 1ère spé NSI 2019 - 2020

Projets

Quiz sur les fonctions en mathématiques en Python

Ce projet est un programme de mathématiques réalisé spécialité NSI (Numérique et Sciences de l’Informatique). Il est organisé sous forme de quiz et réalisé sur le logiciel Thonny.

Présentation du projet

Ce projet permet à un lycéen d’apprendre et de comprendre les différentes fonctions de mathématiques accessibles, généralement, à un élève de seconde (fonction carré, inverse, linéaire, affine et du second degré). Grâce à notre programme, les élèves s’entraînent et cela permet d’évaluer leur niveau. Celui-ci est composé de 11 questions (10 questions sur les fonctions et une question bonus de culture personnelle sur l’histoire des mathématiques). Une fois que l’élève a répondu à toutes les questions, il obtient une note sur 20 points (chaque bonne réponse rapporte 2 points et chaque mauvaise réponse n’apporte ni n’enlève de point).

Supports nécessaires à la réalisation du projet

Afin de réaliser notre projet, nous avons utilisé différents outils :

  • un ordinateur 
  • le logiciel Thonny que l’on peut télécharger sur un ordinateur gratuitement grâce à Internet

Difficultés rencontrées

Tout au long de notre programme, nous avons rencontré diverses difficultés :

  • des problèmes de programmation (dans les lignes de codes)
  • des problèmes dans la publication de cette article
  • des problèmes d’enregistrement qui nous ont parfois coûté de tout recommencer
  • des problèmes d’ordinateur qui surchauffe
  • etc…

Mais malgré toutes ces péripéties, tous nos problèmes ont été résolu avec plus ou moins de difficulté…

Notre programme

import random
score = 0
reponse= int(input("Bienvenue cher utilisateur, prêt à réviser les mathématiques ?\nPour oui, tapez 1 et sinon, tapez 0 : "))
if reponse == 0:
    print("Dommage ! Reviens quand tu seras prêt !")
elif reponse == 1:
    print("C'est parti, commençons !")
    y= input("Quelle est l'équation de f(x) pour une fonction linéaire ? \nf(x)=")
    if y != "ax":
        print("Tu as faux. Mais ne te décourage pas !")
    elif y == "ax":
        print("Bravo ! Continu comme ça.")
        score = score + 2
    chiffre= random.randint(2, 10)
    y2 = str(input("Donne moi l'équation de la fonction linéaire de coefficient directeur {} \nf(x)=".format(chiffre)))
    if y2 != ("{}x".format(chiffre)) :
       print("Tu t'es trompé ! C'est pas grave. Poursuis...")
    elif y2 == ("{}x".format(chiffre)) :
        print("Bravo, tu as raison ! Pousuivons...")
        score = score + 2
    y3= input("Quelle est l'équation de g(x) pour une fonction affine ? \ng(x)=")
    if y3 != "ax+b":
        print("Oh mince, tu as fait une erreur !")
    elif y3 == "ax+b":
        print("Félicitation tu as réussi !")
        score = score + 2
    chiffre2= random.randint(2, 20)
    y4 = str(input("Donne moi l'équation de la fonction affine de coefficient directeur {} et ayant pour ordonnée à l'origine {} \ng(x)=".format(chiffre, chiffre2)))
    if y4 != ("{}x+{}".format(chiffre, chiffre2)) :
        print("Nous avons confiance en toi ! Tu as faux mais tu vas y arriver.")
    elif y4 == ("{}x+{}".format(chiffre, chiffre2)) :
        print("Tu es un génie toi dit donc !")
        score = score + 2
    y5 = input("Quelle est l'équation du second degré h(x) ? \nh(x)=")
    if y5 != "ax²+bx+c" :
        print("Revoie ta leçon ce n'est pas la bonne réponse !")
    elif y5 == "ax²+bx+c" :
        print("Waaaouh quel talent !!")
        score = score + 2
    chiffre3= random.randint(0, 20)
    y6 = str(input("Donne nous l'équation du second degrès pour a= {}, b= {} et c = {} \nh(x)=".format(chiffre, chiffre2, chiffre3)))
    if y6 != ("{}x²+{}x+{}".format(chiffre, chiffre2, chiffre3)):
        print("Tu nous déçois !")
    elif y6 == ("{}x²+{}x+{}".format(chiffre, chiffre2, chiffre3)):
        print("Fantastique !")
        score = score + 2
    y7 = input("Quelle est l'équation de la fonction carré ? \ni(x)=")
    if y7 != "x²" :
        print("Mauvaise réponse !")
    elif y7 == "x²" :
        print ("Bonne réponse !")
        score = score + 2
    y8 = str(input("Quelle est l'équation de la fonction carré pour x= {} (non simplifiée) ? \ni(x)=".format(chiffre)))
    if y8 != ("{}²".format(chiffre)) :
        print("Retente ta chance !")
    elif y8 == ("{}²".format(chiffre)) :
        print("Bien joué !!")
        score = score + 2
    y9 = input("Quelle est l'équation de la fonction inverse ? \nj(x)=")
    if y9 != "1/x" :
        print("Tu vas devoir révisé un peu plus toi...")
    elif y9 == "1/x" :
        print("Bravo ! Tu en a dans la tête toi dit donc...")
        score = score + 2
    y10 = str(input("Quelle est l'équation inverse pour x= {} ? \nj(x)=".format(chiffre)))
    if y10 != "1/{}".format(chiffre) :
        print("C'est pas terrible tout ça")
    elif y10 == "1/{}".format(chiffre) :
        print("Amazing !!")
        score = score + 2
    print("Question bonus...")
    reponsee= input("A quel siècle le mathématicien français François Viète a-t-il proposé une définition des fonctions par des formules et non à partir de tables et de graphiques ? \n")
    if reponsee == "17eme siècle" or reponsee == "17eme":
        print("Waouh ! Quelle personne cultivée es-tu !")
        score = score + 2
    elif reponsee !="17eme siècle" or reponsee !="17eme"  :
        print("Ce n'est pas grave, c'est une question difficile...")
    print("Tu as une note totale de", score, "/20")
    print("Tu as fini ! A bientôt pour de nouvelles aventures...")

Explications du programme

Tout d’abord, avant de commencer l’explication, nous tenons à vous dire, que chaque virgule, parenthèse, alinéa, guillemet ou deux points sont très importants. S’il en manque ne serait-ce qu’un seul, le programme peut totalement « beuguer » et vous marquer « error » de partout (ceci est du vécu…☺).

Les couleurs ci-dessus se mettent automatiquement lorsque vous créez le programme sur Thonny mais celles-ci peuvent vous aider pour voir si vous avez oublié une lettre ou une parenthèse.

Commençons…

Dans un premier temps, il ne faut surtout pas oublier de mettre la ligne de codes 1 :

import random

car c’est grâce à elle que notre programme va nous donner des nombres aléatoires.

Nous l’utilisons à différents endroits mais prenons l’exemple, des lignes de codes suivantes (14, 15, 16 et 18 du programme). Il est écrit.

chiffre= random.randint(2, 10)
y2 = str(input("Donne moi l'équation de la fonction linéaire de coefficient directeur {} \nf(x)=".format(chiffre)))
if y2 != ("{}x".format(chiffre)) :
elif y2 == ("{}x".format(chiffre)) :

Nous avons, à la ligne de codes 14, créé une variable « chiffre » où l’on demande au logiciel de prendre un nombre aléatoire situé entre 2 et 10 compris :

chiffre= random.randint(2, 10)

La virgule, présente entre ces deux chiffres, sert à dire au logiciel de prendre n’importe quel nombre entre ceux-ci.

A la ligne de codes 15, nous utilisons « str » car c’est lui qui va nous permettre de convertir un nombre pris au hasard entre 2 et 10 en un caractère afin que l’on puisse l’utiliser dans la réponse. Les « {} » signifient le nombre aléatoire. Et pour que le logiciel comprenne, il ne faut pas oublier « .format(chiffre) » à l’intérieur des parenthèses pour dire que nous utilisons la variable « chiffre » :

y2 = str(input("Donne moi l'équation de la fonction linéaire de coefficient directeur {} \nf(x)=".format(chiffre)))

A cette même ligne de codes nous utilisons « \n » qui signifie « saut de ligne ».

Grâce à tout cela, nous pouvons voir qu’aux lignes de codes 16 et 18, nous utilisons le chiffre aléatoire donné comme étant un caractère.

Exemple : si le chiffre aléatoire donné est 3, nous pouvons écrire 3x comme réponse pour la fonction linéaire et cela fonctionne pour n’importe quel chiffre aléatoire.

Nous pouvons créer autant de chiffres aléatoires que l’on souhaite tant que toutes les variables sont citées « .format(chiffre, chiffre2, chiffre3) » —> ligne de codes 41 par exemple.

Ensuite, à la ligne de code 2, il est écrit :

score = 0

Ici, nous créons une variable qui se nomme « score » et qui est, au départ, égale à 0. A chaque bonne réponse de la part de l’utilisateur, nous allons marquer « score = score + 2 » (car rappelons-le, chaque bonne réponse rapporte 2 points) comme à la ligne de code 13, ou encore la 20.

Nous allons ensuite créer une deuxième variable, qui se nomme « reponse » à la ligne de codes 3 :

reponse= int(input("Bienvenue cher utilisateur, prêt à réviser les mathématiques ?\nPour oui, tapez 1 et sinon, tapez 0 : "))

Ici nous demandons à l’élève de répondre à une question par des chiffres (s’il est prêt à réviser les mathématiques, il doit taper 1, sinon il doit taper 0).

Nous utilisons « int » et « input » à cette endroit car « input » sert à poser une question à laquelle le logiciel attend une réponse de la part de l’utilisateur et « int » parce que c’est un chiffre qu’il va écrire et non du texte (des caractères).

Après, nous pouvons voir aux lignes de codes 4 et 6 ceci :

if reponse == 0:
elif reponse == 1:

Pourquoi utilisons-nous « if » et « elif » ?

« If » signifie « si » et « elif » veut dire « sinon ». Retour ligne automatique
Ici nous disons au programme que si l’utilisateur répond 0, celui-ci devra écrire « Dommage ! Reviens quand tu seras prêt ! » sinon, si l’utilisateur écrit 1, celui-ci devra écrire « C’est parti, commençons ! ».

Attention : ne pas oublier le deux points à la fin de la ligne de codes de « if » et « elif » !! Après 2 points, il doit toujours y avoir un alinéa.

« Print » signifie imprimer, c’est à dire que l’on demande au logiciel de faire apparaître cette phrase mais que celle-ci n’attend pas de réponse. C’est une affirmation.

Lorsqu’on pose une question (avec « input ») ou qu’on affiche du texte (avec « print »), on met tout le temps le texte entre parenthèses et entre guillemets.

A la ligne de codes 9, il est écrit :

if y != "ax":

Et à la ligne de codes 11, il nous pouvons lire :

elif y == "ax":

 » != » signifie différent et « == » signifie égal (on doit toujours en mettre 2 !)

Puis, aux lignes de codes 73 et 76, nous utilisons « or » qui signifie « ou ». Cela permet de proposer plusieurs réponses justes car le résultat peut, ici, être écrit de deux manières différentes :

if reponsee == "17eme siècle" or reponsee == "17eme":
elif reponsee !="17eme siècle" or reponsee !="17eme"  :

Pour finir, voyons ensemble la ligne de codes 78 :

print("Tu as une note totale de", score, "/20")

A cet endroit, le logiciel donne le score total des points obtenus c’est à dire des bonnes réponses fois deux (car chaque bonne réponse rapporte deux points). On marque donc la phrase, suivi de la variable (qui n’est pas du texte donc celle-ci n’est pas entre guillemets).

Conclusion

Nous espérons que toutes ces explications vous ont aidé et que grâce à cela notre programme est plus compréhensible pour vous. Maintenant, que vous êtes un génie de Python, vous pouvez faire les modifications que vous souhaitez pour vous l’approprier !!

Vous le voulez ? Et bien le voici…