#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Pyromaths
# Un programme en Python qui permet de créer des fiches d'exercices types de
# mathématiques niveau collège ainsi que leur corrigé en LaTeX.
# Copyright (C) 2006 -- Jérôme Ortais (jerome.ortais@pyromaths.org)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
import math
import random
import string
from ..outils import Arithmetique, Affichage
#===============================================================================
# Poser des opérations
#===============================================================================
def valeurs():
nba = Arithmetique.valeur_alea(111, 99999)
while 1:
nbb = Arithmetique.valeur_alea(111, 99999)
if nbb - (nbb // 10) * 10:
break
puisb = Arithmetique.valeur_alea(-2, 0)
nbb = nbb * 10 ** puisb
deca = [str(nba)[i] for i in range(len(str(nba)))]
decb = [str(nbb)[i] for i in range(len(str(nbb)))]
if random.randrange(2):
(nba, deca, nbb, decb) = (nbb, decb, nba, deca)
if deca.count('.'):
posa = deca.index('.')
else:
posa = len(deca)
if decb.count('.'):
posb = decb.index('.')
else:
posb = len(decb)
lavtvirg = max(posa, posb)
laprvirg = max(len(deca) - posa, len(decb) - posb)
return (nba, nbb, deca, decb, lavtvirg, laprvirg)
def valeurs_prod():
while 1:
nba = Arithmetique.valeur_alea(101, 9999)
if nba - (nba // 10) * 10:
break
puisa = Arithmetique.valeur_alea(-3, -1)
while 1:
nbb = Arithmetique.valeur_alea(101, 999)
if nbb - (nbb // 10) * 10:
break
puisb = Arithmetique.valeur_alea(-3, -1)
return (nba, nbb, puisa, puisb)
def lignes(ligne, deca, lavtvirg, laprvirg):
if deca.count('.'):
posa = deca.index('.')
else:
posa = len(deca)
if posa < lavtvirg:
for i in range(lavtvirg - posa):
ligne.append('')
for i in range(len(deca)):
if deca[i] == '.':
ligne.append(',')
else:
ligne.append(str(deca[i]))
for i in range(laprvirg - (len(deca) - posa)):
if ligne.count(','):
ligne.append('0')
else:
ligne.append(',')
return ligne
def mon_int(t): # retourne un entier texte sous la forme d'un nombre, zéro sinon
if t == '':
t = 0
elif ('1234567890').count(t):
t = int(t)
else:
t = 0
return t
def retenues_somme(ligne1, ligne2):
lg = len(ligne1)
ligne0 = ['' for i in range(lg)]
for i in range(lg - 1):
#on déplace la retenue pour qu'elle ne soit pas au-dessus de la virgule
if ligne1[(lg - i) - 1] == ',' and ligne0[(lg - i) - 1] == '1':
ligne0[(lg - i) - 2] = '1'
elif mon_int(ligne1[(lg - i) - 1]) + mon_int(ligne2[(lg - i) - 1]) + \
mon_int(ligne0[(lg - i) - 1]) > 9:
ligne0[(lg - i) - 2] = '1'
return ligne0
def retenues_diff(ligne1, ligne2):
lg = len(ligne1)
ret = 0
for i in range(lg - 1):
if not (ligne1[(lg - i) - 1] == ',' and ret):
if mon_int(ligne1[(lg - i) - 1]) < mon_int(ligne2[(lg - i) -
1]) + ret:
ligne1[(lg - i) - 1] = '$_1$%s' % ligne1[(lg - i) - 1]
tmpret = 1
else:
tmpret = 0
if ret:
ligne2[(lg - i) - 1] = '%s$_{+1}$' % ligne2[(lg - i) - 1]
ret = tmpret
return (ligne1, ligne2)
def tex_somme(exo, cor):
(ligne1, ligne2) = ([''], ['+'])
(nba, nbb, deca, decb, lavtvirg, laprvirg) = valeurs()
total = nba + nbb
dectotal = [str(total)[i] for i in range(len(str(total)))]
if dectotal.index('.') <= lavtvirg:
ligne3 = ['']
else:
ligne3 = []
ligne1 = lignes(ligne1, deca, lavtvirg, laprvirg)
ligne2 = lignes(ligne2, decb, lavtvirg, laprvirg)
ligne3 = lignes(ligne3, dectotal, lavtvirg, laprvirg)
ligne0 = retenues_somme(ligne1, ligne2)
if ligne0[0] == '1':
ligne0[0] = '\\tiny 1'
exo.append(_(u'\\item La somme des termes %s et %s.\\par') % (Affichage.decimaux(nba),
Affichage.decimaux(nbb)))
cor.append(_(u'\\item La somme des termes %s et %s.\\par') % (Affichage.decimaux(nba),
Affichage.decimaux(nbb)))
cor.append('\\begin{tabular}[t]{*{%s}{c}}' % (lavtvirg +
laprvirg + 1))
cor.append('%s \\\\' % ' & \\tiny '.join(ligne0))
cor.append('%s \\\\' % ' & '.join(ligne1))
cor.append('%s \\\\\n\\hline' % ' & '.join(ligne2))
cor.append('%s \\\\' % ' & '.join(ligne3))
cor.append('\\end{tabular}\\par')
formule = '%s+%s = %s' % (Affichage.decimaux(nba, 1),
Affichage.decimaux(nbb, 1), Affichage.decimaux(nba +
nbb, 1))
cor.append((u'\\[ \\boxed{%s} \\] ').expandtabs(2 * 3) % (formule))
quiz_txt = (_(u"Calcule la somme des termes $$%s \\text{ et } %s$$
\n") %
(Affichage.decimaux_quiz(nba), Affichage.decimaux_quiz(nbb)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt += (_(u"Réponse: ")+"{1:SHORTANSWER:%s100%s%s}
\n" %
("%", "%", Affichage.decimaux_quiz(nba + nbb,0)))
return quiz_txt
def tex_difference(exo, cor):
(ligne1, ligne2) = ([''], ['-'])
(nba, nbb, deca, decb, lavtvirg, laprvirg) = valeurs()
if nba < nbb:
(nba, nbb, deca, decb) = (nbb, nba, decb, deca)
total = nba - nbb
dectotal = [str(total)[i] for i in range(len(str(total)))]
if dectotal.index('.') <= lavtvirg:
ligne3 = ['']
else:
ligne3 = []
ligne1 = lignes(ligne1, deca, lavtvirg, laprvirg)
ligne2 = lignes(ligne2, decb, lavtvirg, laprvirg)
ligne3 = lignes(ligne3, dectotal, lavtvirg, laprvirg)
(ligne1, ligne2) = retenues_diff(ligne1, ligne2)
exo.append(_(u"\\item La différence des termes %s et %s.\\par") %
(Affichage.decimaux(nba), Affichage.decimaux(nbb)))
cor.append(_(u"\\item La différence des termes %s et %s.\\par") %
(Affichage.decimaux(nba), Affichage.decimaux(nbb)))
cor.append('\\begin{tabular}[t]{*{%s}{c}}' % (lavtvirg +
laprvirg + 1))
cor.append('%s \\\\' % ' & '.join(ligne1))
cor.append('%s \\\\\n\\hline' % ' & '.join(ligne2))
cor.append('%s \\\\' % ' & '.join(ligne3))
cor.append('\\end{tabular}\\par')
formule = '%s-%s = %s' % (Affichage.decimaux(nba, 1),
Affichage.decimaux(nbb, 1), Affichage.decimaux(nba -
nbb, 1))
cor.append((u'\\[ \\boxed{%s} \\] ').expandtabs(2 * 3) % (formule))
quiz_txt = (_(u"Calcule la différence des termes $$%s \\text{ et } %s$$
\n") %
(Affichage.decimaux_quiz(nba), Affichage.decimaux_quiz(nbb)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt += (_(u"Réponse: ")+"{1:SHORTANSWER:%s100%s%s}
\n" %
("%", "%", Affichage.decimaux_quiz(nba - nbb,0)))
return quiz_txt
def pose_mult(nba, nbb):
(ligne, total) = ([], 0)
for i in range(int(math.log10(nbb)) + 1):
sstotal = ((nbb - (nbb // 10) * 10) * nba) * 10 ** i
total = total + sstotal
ligne.append(sstotal)
nbb = nbb // 10
return (ligne, total)
def ligneprod(ligne, dec, lg):
ligne.extend(['' for i in range((lg - len(dec)) - len(ligne))])
ligne.extend(dec)
return ligne
def tex_produit(exo, cor):
(nba, nbb, puisa, puisb) = valeurs_prod()
deca = [','.join(str(nba * 10 ** puisa).rsplit('.'))[i] \
for i in range(len(str(nba * 10 ** puisa)))]
decb = [','.join(str(nbb * 10 ** puisb).rsplit('.'))[i] \
for i in range(len(str(nbb * 10 ** puisb)))]
(dec3, total) = pose_mult(nba, nbb)
(dec3bis, total) = pose_mult(nbb, nba)
total = ((nba * 10 ** puisa) * nbb) * 10 ** puisb
dec4 = [str(total)[i] for i in range(len(str(total)))]
if dec4.count('.'):
i = dec4.index('.')
if (len(dec4) - i) - 1 < -(puisa + puisb):
for j in range(-(puisa + puisb) - len(dec4) + i + 1):
dec4.append('0') #ajoute les 0 inutiles au produit
dec4.pop(i) # supprime le point décimal
dec4[i - 1] = '%s\\Huge ,' % dec4[i - 1] # et ajoute une Huge virgule au chiffre des unités
lg = max(len(dec4), max(len(deca), len(decb))) # nombre de colonnes dans le tableau
exo.append(_(u'\\item Le produit des facteurs %s et %s.\\par') % (Affichage.decimaux(nba *
10 ** puisa), Affichage.decimaux(nbb * 10 ** puisb)))
cor.append(_(u'\\item Le produit des facteurs %s et %s.\\par') % (Affichage.decimaux(nba *
10 ** puisa), Affichage.decimaux(nbb * 10 ** puisb)))
cor.append('\\begin{enumerate}')
cor.append(_(u'\\item Première méthode :\\par'))
cor.append('\\begin{tabular}[t]{*{%s}{c}}' % lg)
cor.append('%s \\\\' % ' & '.join(ligneprod([], deca,lg)))
cor.append('%s \\\\\n\\hline' % ' & '.join(ligneprod([_('$\\times$')], decb, lg)))
for i in range(len(dec3)):
dec = [str(dec3[i])[j] for j in range(len(str(dec3[i])))]
cor.append('%s \\\\' % ' & '.join(ligneprod([], dec, lg)))
cor.append('\\hline \\\\')
cor.append('%s \\\\' % ' & '.join(ligneprod([], dec4, lg)))
cor.append('\\end{tabular}')
cor.append(_(u'\\item Seconde méthode :\\par'))
cor.append('\\begin{tabular}[t]{*{%s}{c}}' % len(dec4))
cor.append('%s \\\\' % ' & '.join(ligneprod([], decb, lg)))
cor.append('%s \\\\\n\\hline' % ' & '.join(ligneprod([_('$\\times$')], deca, lg)))
for i in range(len(dec3bis)):
dec = [str(dec3bis[i])[j] for j in range(len(str(dec3bis[i])))]
cor.append('%s \\\\' % ' & '.join(ligneprod([], dec, lg)))
cor.append('\\hline \\\\')
cor.append('%s \\\\' % ' & '.join(ligneprod([], dec4, lg)))
cor.append('\\end{tabular}')
cor.append('\\end{enumerate}')
#outils.Arithmetique.ecrit_tex(f1, '%s\\times%s = %s' % (Affichage.decimaux(nba *
#10 ** puisa, 1), Affichage.decimaux(nbb * 10 **
#puisb, 1), Affichage.decimaux((nba * nbb) * 10 ** (puisa +
#puisb), 1)), cadre=1, thenocalcul='', tabs=3)
#### Remplacement de la fonction Arithmetique.ecrit_tex :
formule = _('%s\\times%s = %s') % (Affichage.decimaux(nba *
10 ** puisa, 1), Affichage.decimaux(nbb * 10 **
puisb, 1), Affichage.decimaux((nba * nbb) * 10 ** (puisa +
puisb), 1))
cor.append((u'\\[ \\boxed{%s} \\] ').expandtabs(2 * 3) % (formule))
quiz_txt = (_(u"Calcule le produit des facteurs $$%s \\text{ et } %s$$
\n") %
(Affichage.decimaux_quiz(nba * 10 ** puisa), Affichage.decimaux_quiz(nbb * 10 ** puisb)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt += (_(u"Réponse: ")+"{1:SHORTANSWER:%s100%s%s}
\n" %
("%", "%", Affichage.decimaux_quiz((nba * nbb) * 10 ** (puisa + puisb),0)))
return quiz_txt
def Operations():
nb_exos = 3
tex_exos = (tex_somme, tex_difference, tex_produit)
ordre_exos = [i for i in range(nb_exos)]
exo = ["\\exercice", _(u'Poser et effectuer les opérations suivantes.'), '\\begin{multicols}{2}\\noindent', '\\begin{enumerate}']
cor = ["\\exercice*", _(u'Poser et effectuer les opérations suivantes.'), '\\begin{multicols}{2}\\noindent', '\\begin{enumerate}']
quiz = [u"cloze"]
quiz_nom = _(u"Calcul avec le décimale (sans division)")
quiz_exo_cor = _(u"Réalise les suivantes opérations avec le décimale:
\n")
for i in range(nb_exos):
a = random.randrange(nb_exos - i)
j = ordre_exos.pop(a)
quiz_exo_cor += (u"$$%s) \\;$$"%(i+1) + tex_exos[j](exo, cor))
exo.append('\\end{enumerate}')
exo.append('\\end{multicols}')
cor.append('\\end{enumerate}')
cor.append('\\end{multicols}')
quiz.append([quiz_nom, quiz_exo_cor[0:(len(quiz_exo_cor)-1)], ""])
return (exo, cor, quiz)
#===============================================================================
# Calcul mental
#===============================================================================
def tex_calcul_mental(exo, cor, quiz):
modules = (plus, moins, plus, div)
calculs = [i for i in range(20)]
quiz_nom = _(u"Calcul mental - Sixième")
quiz_exo_cor = _(u"Réalise sans calculatrice:
\n")
quiz_exo_cor += u'
\n'
quiz_exo_cor += u'\n'
for i in range(20):
j = random.randrange(0, len(calculs))
(a, b) = modules[calculs[j] // 5](10)
if calculs[j] // 5 == 0:
quiz_exo_cor += (u"$$%s) \\;"%(i+1) + choix_trou(a, b, a + b, '+', exo, cor))
if calculs[j] // 5 == 1:
quiz_exo_cor += (u"$$%s) \\;"%(i+1) + choix_trou(a, b, a - b, '-', exo, cor))
if calculs[j] // 5 == 2:
quiz_exo_cor += (u"$$%s) \\;"%(i+1) + choix_trou(a, b, a * b, _('\\times'), exo, cor))
if calculs[j] // 5 == 3:
quiz_exo_cor += (u"$$%s) \\;"%(i+1) + choix_trou(a, b, a // b, _('\\div'), exo, cor))
calculs.pop(j)
if (i+1) % 7 == 0:
quiz_exo_cor += u" | \n"
quiz_exo_cor += u" |
"
quiz.append([quiz_nom, quiz_exo_cor, ""])
def choix_trou(nb1, nb2, tot, operateur, exo, cor):
nbaleatoire = random.randrange(4)
if nbaleatoire > 1:
exo.append(_('\\item $%s %s %s = \\ldots\\ldots$') % (nb1,
operateur, nb2))
cor.append('\\item $%s %s %s = \\mathbf{%s}$' % (nb1,
operateur, nb2, tot))
quiz_txt = ("%s %s %s = $$ {1:NUMERICAL:=%s}
\n" %
(nb1, operateur, nb2, Affichage.decimaux_quiz(tot,1)))
elif nbaleatoire > 0:
exo.append(_('\\item $%s %s \\ldots\\ldots = %s$') % (nb1,
operateur, tot))
cor.append('\\item $%s %s \\mathbf{%s} = %s$' % (nb1,
operateur, nb2, tot))
quiz_txt = ("%s %s$$ {1:NUMERICAL:=%s} $$ = %s$$
\n" %
(nb1, operateur, Affichage.decimaux_quiz(nb2,1), tot))
else:
exo.append(_('\\item $\\ldots\\ldots %s %s = %s$') % (operateur,
nb2, tot))
cor.append('\\item $\\mathbf{%s} %s %s = %s$' % (nb1,
operateur, nb2, tot))
quiz_txt = ("$$ {1:NUMERICAL:=%s} $$ %s %s = %s$$
\n" %
(Affichage.decimaux_quiz(nb1,1), operateur, nb2, tot))
return quiz_txt
def plus(valeurmax):
(a, b) = (Arithmetique.valeur_alea(1, valeurmax), Arithmetique.valeur_alea(1,
valeurmax))
return (a, b)
def moins(valeurmax):
(a, b) = (Arithmetique.valeur_alea(1, valeurmax), Arithmetique.valeur_alea(1,
valeurmax))
return (a + b, a)
def div(valeurmax):
(a, b) = (Arithmetique.valeur_alea(1, valeurmax), Arithmetique.valeur_alea(1,
valeurmax))
return (a * b, a)
def CalculMental():
exo = ["\\exercice", _(u'Effectuer sans calculatrice :'), '\\begin{multicols}{4}\\noindent', '\\begin{enumerate}']
cor = ["\\exercice*", _(u'Effectuer sans calculatrice :'), '\\begin{multicols}{4}\\noindent', '\\begin{enumerate}']
quiz = [u"cloze"]
tex_calcul_mental(exo, cor, quiz)
exo.append('\\end{enumerate}')
exo.append('\\end{multicols}')
cor.append('\\end{enumerate}')
cor.append('\\end{multicols}')
return (exo, cor, quiz)
#===============================================================================
# PRODUITS ET QUOTIENTS PAR 10, 100, 1000
#===============================================================================
def tex_dix(exo, cor, quiz):
nb = 4 # nb de calculs de chaque type
l = valeurs10(nb)
quiz_nom = _(u"Produit et divisions par 10, 100...")
quiz_exo_cor = _(u"Complète sans calculatrice:
\n")
quiz_exo_cor += u'\n'
quiz_exo_cor += u'\n'
for i in range(len(l)):
j = random.randrange(0, len(l))
quiz_exo_cor += (u"$$%s) \\;"%(i+1) + tex_formule_dix(l.pop(j), exo, cor))
if i+1 == 6:
quiz_exo_cor += u" | \n"
quiz_exo_cor += u" |
"
quiz.append([quiz_nom, quiz_exo_cor, ""])
def tex_formule_dix(l, exo, cor):
if l[2] == '*':
alea = random.randrange(0, 5)
if alea > 1:
exo.append(_('\\item $%s \\quad\\times\\quad %s \\quad = \\quad \\dotfill$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[1],
1)))
cor.append(_('\\item $%s \\times %s = \\mathbf{%s}$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[1],
1), Affichage.decimaux(l[0] * l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("%s \\, \\cdot \\, %s = $$ {1:SHORTANSWER:%s100%s%s}
\n" %
(Affichage.decimaux_quiz(l[0]), Affichage.decimaux_quiz(l[1]),
"%", "%", Affichage.decimaux_quiz(l[0] * l[1],0)))
elif alea > 0:
exo.append(_('\\item $%s \\quad\\times\\quad \\dotfill \\quad = \\quad %s$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[0] *
l[1], 1)))
cor.append(_('\\item $%s \\times \\mathbf{%s} = %s$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[1],
1), Affichage.decimaux(l[0] * l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("%s \\, \\cdot \\, $$ {1:SHORTANSWER:%s100%s%s} $$ = %s $$
\n" %
(Affichage.decimaux_quiz(l[0]), "%", "%", Affichage.decimaux_quiz(l[1],0),
Affichage.decimaux_quiz(l[0] * l[1])))
else:
exo.append(_('\\item $\\dotfill \\quad\\times\\quad %s \\quad = \\quad %s$') %
(Affichage.decimaux(l[1], 1), Affichage.decimaux(l[0] *
l[1], 1)))
cor.append(_('\\item $\\mathbf{%s} \\times %s = %s$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[1],
1), Affichage.decimaux(l[0] * l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("$$ {1:SHORTANSWER:%s100%s%s} $$ \\cdot \\, %s = %s$$
\n" %
("%", "%", Affichage.decimaux_quiz(l[0],0), Affichage.decimaux_quiz(l[1]),
Affichage.decimaux_quiz(l[0] * l[1])))
else:
alea = random.randrange(0, 5)
if alea > 1:
exo.append(_('\\item $%s \\quad\\div\\quad %s \\quad = \\quad \\dotfill$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[1],
1)))
cor.append(_('\\item $%s \\div %s = \\mathbf{%s}$') % (Affichage.decimaux(l[0],
1), Affichage.decimaux(l[1], 1), Affichage.decimaux(l[0] /
l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("%s \\, : \\, %s = $$ {1:SHORTANSWER:%s100%s%s}
\n" %
(Affichage.decimaux_quiz(l[0]), Affichage.decimaux_quiz(l[1]),
"%", "%", Affichage.decimaux_quiz(l[0] / l[1],0)))
elif alea > 0:
exo.append(_('\\item $%s \\quad\\div\\quad \\dotfill \\quad = \\quad %s$') %
(Affichage.decimaux(l[0], 1), Affichage.decimaux(l[0] /
l[1], 1)))
cor.append(_('\\item $%s \\div \\mathbf{%s} = %s$') % (Affichage.decimaux(l[0],
1), Affichage.decimaux(l[1], 1), Affichage.decimaux(l[0] /
l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("%s \\, : \\, $$ {1:SHORTANSWER:%s100%s%s} $$ = %s $$
\n" %
(Affichage.decimaux_quiz(l[0]), "%", "%", Affichage.decimaux_quiz(l[1],0),
Affichage.decimaux_quiz(l[0] / l[1])))
else:
exo.append(_('\\item $\\dotfill \\quad\\div\\quad %s \\quad = \\quad %s$') %
(Affichage.decimaux(l[1], 1), Affichage.decimaux(l[0] /
l[1], 1)))
cor.append(_('\\item $\\mathbf{%s} \\div %s = %s$') % (Affichage.decimaux(l[0],
1), Affichage.decimaux(l[1], 1), Affichage.decimaux(l[0] /
l[1], 1)))
## Cambia a NUMERICAL cuando el bug de quiz se solucione, también el ,0 a ,1
quiz_txt = ("$$ {1:SHORTANSWER:%s100%s%s} $$ : \\, %s = %s$$
\n" %
("%", "%", Affichage.decimaux_quiz(l[0],0), Affichage.decimaux_quiz(l[1]),
Affichage.decimaux_quiz(l[0] / l[1])))
return quiz_txt
def valeurs10(nb): # renvoie nb valeur de chaque type : *10, /10, *0.1
l = []
for i in range(nb):
if random.randrange(0, 1):
l.append((Arithmetique.valeur_alea(111, 999) * 10 ** random.randrange(-3,
0), 10 ** (i + 1), '*'))
else:
l.append((10 ** (i + 1), Arithmetique.valeur_alea(111, 999) * 10 **
random.randrange(-3, 0), '*'))
for i in range(nb):
l.append((Arithmetique.valeur_alea(111, 999) * 10 ** random.randrange(-3,
0), 10 ** (i + 1), '/'))
for i in range(nb):
if random.randrange(0, 1):
l.append((Arithmetique.valeur_alea(111, 999) * 10 ** random.randrange(-3,
0), 10 ** (-i - 1), '*'))
else:
l.append((10 ** (-i - 1), Arithmetique.valeur_alea(111, 999) * 10 **
random.randrange(-3, 0), '*'))
return l
def ProduitPuissanceDix():
exo = ["\\exercice", _(u'Compléter sans calculatrice :'), '\\begin{multicols}{2}\\noindent', '\\begin{enumerate}']
cor = ["\\exercice*", _(u'Compléter sans calculatrice :'), '\\begin{multicols}{2}\\noindent', '\\begin{enumerate}']
quiz = [u"cloze"]
tex_dix(exo, cor, quiz)
exo.append('\\end{enumerate}')
exo.append('\\end{multicols}')
cor.append('\\end{enumerate}')
cor.append('\\end{multicols}')
return (exo, cor, quiz)