1 | initial version |
If you have actual numbers a
, b
, and c
and you define Delta = b**2-4*a*c
, there is nothing to hold: Python immediately evaluates Delta
as a number. You could instead define Delta
as a symbolic expression in terms of variables a
, b
, and c
, and then evaluate it. Something like this:
sage: var('a,b,c')
(a, b, c)
sage: D = b**2 - 4*a*c
sage: D
b^2 - 4*a*c
sage: D.subs({a: 2, b: 1, c: 5})
-39
In terms of your code:
from random import sample
def signe():
signe = sample([Integer(i) for i in range(-1, 2, 1) if i != 0],1)
return(signe[0])
def calcul(amax, bmax, cmax):
# first change:
var('a, b, c')
# these are all symbolic now:
f(x) = a*x^2+b*x+c
alpha = -b/2/a
beta = f(x=alpha)
fcanonique(x) = a*(x-alpha)^2+beta
Delta = b**2-4*a*c
# a_rand etc.: numbers to plug into these expressions.
a_rand = randint(1,amax)*signe()
b_rand = randint(0,bmax)*signe()
c_rand = randint(0,cmax)*signe()
subs_dict = {a: a_rand, b: b_rand, c: c_rand}
output = r"Soit $f$ le trinôme défini sur $\R$ par ~${}=0$.".format(latex(f(x)))
output += r"\medbreak"
output += r"\begin{enumerate}"
output += r"\item Déterminer une forme canonique de $f$."
output += r"\item Résoudre dans $\R$ l'équation $f(x)=0$ par la méthode de votre choix."
output += r"\item $f$ est-elle factorisable ? Si oui, déterminer en une forme factorisée."
# print c or c_rand?
output += r"\item Résoudre dans $\R$ l'équation $f(x)={}$.".format(c_rand)
# print beta or beta.subs(subs_dict)?
output += r"\item Résoudre dans $\R$ l'équation $f(x)={}$.".format(beta)
output += r"\end{enumerate}"
output += r"\medbreak\uline{Réponses} :\medbreak"
output += r"\begin{enumerate}"
output +=r"\item On a $f(x)={}$".format(latex(fcanonique(x)))
# D is Delta with numbers plugged in
D = Delta.subs(subs_dict)
if D < 0:
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}<0$, et donc cette équation n'a pas de solution réelle :".format(latex(Delta))
output += "\\bigbreak{}"
output += r"Ce trinôme admet une forme canonique : "
elif D == 0:
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}$, et donc cette équation admet une unique solution $x_0={}$".format(latex(Delta), latex(alpha))
else:
x1 = simplify((-b-Delta^(1/2))/(2*a))
x2 = simplify((-b+Delta^(1/2))/(2*a))
ffactorisee(x) = a*(x-x1)*(x-x2)
output += r"\item On reconnaît une équation du second degré de discriminant $\Delta={}>0$, et donc cette équation admet deux solutions réelles $x_1$ et $x_2$ avec : \quad $\displaystyle x_1={}$ \quad et \quad $\displaystyle x_2={}$.".format(latex(Delta), latex(x1), latex(x2))
output += "\\bigbreak{}"
output += r"\end{enumerate}"
return(output)