Les élèves n’étant pas très bons en maths sur les fractions, notre projet est de travailler sur les fractions.
Nous allons créer un programme qui permet à l’utilisateur de réviser la simplification de fractions.
Nous introduirons un score pour évaluer la prestation de l’utilisateur.
Pour commencer, nous allons voir ce que l’on peut faire avec la bibliothèque **random**.
Dans la console, tapez:
**import random**
**help(random.randint)**
Que permet la fonction **randint(a,b)** de la bibliothèque random?
Tapez dans la console:
**help(random.random)**
Que permet la fonction **random()** de la bibliothèque random?
Construisez un programme qui génère au hasard 3 entiers.
Le premier n (comme numérateur) qui sera un nombre entre 2 et 6 au sens large.
Le second d (comme dénominateur) qui sera un nombre entre 2 et 9 au sens large.
Le troisième coef qui sera un nombre entre 2 et 5.
Affichez ces trois nombres.
from random import *
n=randint(2,6)
d=randint(2,9)
coef=randint(2,5)
print("numérateur : ",n,"dénominateur : ",d,"coefficient : ",coef)
Nous allons nous intéresser à la fraction n*coef/d*coef qui est simplifiable par coef.
Il vas de sois que si n=d, nous nous retrouvons avec n*coef/d*coef=coef/coef =1.
Ceci n’est pas intéressant. Nous allons donc entrer la valeur de n/d dans une variable re (comme résultat).
Nous poursuivrons que si re est différent de 1.
Nous allons avoir besoin d’un opérateur logique supplémentaire:
**!=** permet de tester si deux quantités sont différentes.
Modifiez votre programme précédent, pour que celui-ci :
calcule le numérateur "nu" et le dénominateur "de" de la fraction à simplifier,
calcule re=nu/de.
si re est différent de 1, affiche "la fraction à simplifier est : ....."
sinon, affiche "pas intéressant"
from random import *
n=randint(2,6)
d=randint(2,9)
coef=randint(2,5)
nu=coef*n
de=coef*d
re=nu/de
if re!=1:
print("La fraction à simplifier est : ",nu,"/",de)
else:
print("pas intéressant")
Nous allons avoir besoin dans la bibliothèque **fractions**.
En effet, l'une des situations possible, est que la forme la plus simplifiée de nu/de ne soit pas n/d.
En effet, si n=4, d=6, coef= 3 alors nu/de=12/18 et n/d=4/6. La forme la plus simplifiée est 2/3.
Dans la bibliothèque fractions, nous avons la fonction:
Fraction(entier,entier) qui simplifie la fraction.
*Exemple :*
fr=Fraction(10,-8) #La variable fr va contenir la fraction -5/4
Nous avons également les méthodes :
numerator et denominator
*Exemple :*
num=fr.numerator #La variable num va contenir le numérateur de la fraction.
den=fr.denominator #La variable den va contenir le dénominateur de la fraction.
Vous allez modifier votre programme pour lorsque re est différent de 1,
récupérer dans la variable fr la fraction simplifiée égale à nu/de
récupérer dans la variable num le numérateur de notre fraction simplifiée,
récupérer dans la variable den le dénominateur de notre fraction simplifiée.
Vous afficherez les valeur de fr, num et den.
from random import *
from fractions import Fraction
n=randint(2,6)
d=randint(2,9)
coef=randint(2,5)
nu=coef*n
de=coef*d
re=nu/de
if re!=1:
print("La fraction à simplifier est : ",nu,"/",de)
fr=Fraction(n,d)
num=fr.numerator
den=fr.denominator
print("fr =",fr," num=",num," den=",den)
else:
print("pas intéressant")
Il nous reste à demander à l'utilisateur sa réponse et à l'analyser.
Deux situations, le dénominateur est 1
Nous pouvons comparer deux entiers.
ou le dénominateur n'est pas 1
Nous devons comparer des chaines de caractères.
Remarques sur les opérations possibles sur les chaînes de caractères.
‘bon’+’jour’ # Vaut ‘bonjour’
‘Ha’*3 # Vaut ‘HaHaHa’
‘bon’<‘jour’ # Vaut True (ordre alphabétique respecté)
‘ha’==‘HA’ # Vaut False.
‘ou’ in ‘jour’ # Vaut True
‘on’ not in ‘Bon’ #Vaut False
A vous de modifiez votre programme.
from random import *
from fractions import Fraction
n=randint(2,6) #Génère un nombre entre 2 et 6 au sens large
d=randint(2,9)
coef=randint(2,5)
nu=coef*n #Calcul le numérateur de la fonction à simplifier
de=coef*d
re=nu/de
if re!=1: #On ne pose la question que si la réponse n'est pas 1
fr=Fraction(n,d) #fr contient la fraction simplifiée
num=fr.numerator
den=fr.denominator
sol=input("simplifie la fraction suivante au maximum "+str(nu)+"/"+str(de)+" ")
if den==1: #Si le dénominateur est 1, on ne saisi que le numérateur
if int(sol)==num:
print("Bravo")
else:
print("Tu es nul.")
else:
if sol==str(num)+"/"+str(den):
print("bravo")
else:
print("Tu es nul.")
else:
print("pas intéressant")
Transformez votre programme en fonction. Vous générerez les valeurs de n, d et coef dans le "main" que vous passerez dans la fonction en paramètres. Vous appellerez votre fonction dans le "main". Vous testerez la situation n=6, d=3 et coef=4.
from random import *
from fractions import Fraction
###section des fonctions
def simp_frac(n:int,d:int,coef:int):
"""Fonction qui demande à l'utilisateur de simplifier une fraction au maximum"""
nu=coef*n #Calcul le numérateur de la fonction à simplifier
de=coef*d
re=nu/de
if re!=1: #On ne pose la question que si la réponse n'est pas 1
fr=Fraction(n,d) #fr contient la fraction simplifiée
num=fr.numerator
den=fr.denominator
sol=input("simplifie la fraction suivante au maximum "+str(nu)+"/"+str(de)+" ")
if den==1: #Si le dénominateur est 1, on ne saisi que le numérateur
if int(sol)==num: #Penser à convertir sol en entier pour le comparer à num
print("Bravo")
else:
print("Tu es nul.")
else:
if sol==str(num)+"/"+str(den): #On compare des chaines de caractères.
print("bravo")
else:
print("Tu es nul.")
else:
print("pas intéressant")
###section main
n=randint(2,6) #Génère un nombre entre 2 et 6 au sens large
d=randint(2,9)
coef=randint(2,5)
simp_frac(n,d,coef) #Appelle la fonction avec les valeurs calculées au dessus
simp_frac(6,3,4) #Appelle la fonction dans un cas particulier