Ask Your Question

Revision history [back]

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)