164 lines
3.3 KiB
Python
164 lines
3.3 KiB
Python
|
#!/usr/bin/env python
|
||
|
# encoding: utf-8
|
||
|
|
||
|
from random import randint, uniform
|
||
|
from math import sqrt
|
||
|
from jinja2 import Template
|
||
|
|
||
|
"""
|
||
|
Generate expression for litteral calculous
|
||
|
|
||
|
3 types of expression (a, b, c != 0, 1)
|
||
|
1 -> ax + b and eval for x != -b / a
|
||
|
2 -> ax(bx + c) and eval for x != 0 and x != -c / b
|
||
|
3 -> ax^2 + b and eval for x != +-sqrt(b/a) (if a and b have same sign)
|
||
|
"""
|
||
|
|
||
|
def gene_type1(min_ = -10, max_ = 10):
|
||
|
"""@todo: Docstring for gene_type1
|
||
|
|
||
|
:param min_: @todo
|
||
|
:param max_: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
a, b = 0, 0
|
||
|
while (b in [0]) or (a in [0, 1]):
|
||
|
a = randint(min_, max_)
|
||
|
b = randint(1, max_)
|
||
|
|
||
|
return "{}x + {}".format(a,b), [-b/a]
|
||
|
|
||
|
def gene_type2(min_, max_):
|
||
|
"""@todo: Docstring for gene_type2
|
||
|
|
||
|
:param min_: @todo
|
||
|
:param max_: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
a, b, c = 0, 0, 0
|
||
|
while (a in [0, 1]) or (b in [0, 1]) or c in [0]:
|
||
|
a = randint(min_, max_)
|
||
|
b = randint(min_, max_)
|
||
|
c = randint(1, max_)
|
||
|
|
||
|
return "{}x({}x + {})".format(a,b,c), [0, -c/b]
|
||
|
|
||
|
def gene_type3(min_ = -10, max_ = 10):
|
||
|
"""@todo: Docstring for gene_type3
|
||
|
|
||
|
:param min_: @todo
|
||
|
:param max_: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
a, b = 0, 0
|
||
|
while (b in [0]) or (a in [0, 1]):
|
||
|
a = randint(min_, max_)
|
||
|
b = randint(1, max_)
|
||
|
|
||
|
if a*(-b) > 0:
|
||
|
VI = [-sqrt(-b/a), sqrt(-b/a)]
|
||
|
else:
|
||
|
VI = []
|
||
|
|
||
|
return "{}x^2 + {}".format(a,b), VI
|
||
|
|
||
|
def get_goodX(VI, approx = 0, min_ = -10, max_ = 10):
|
||
|
"""@todo: Docstring for get_goodX
|
||
|
|
||
|
:param VI: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
x = uniform(min_, max_)
|
||
|
if approx == 0:
|
||
|
x = int(x)
|
||
|
else:
|
||
|
x = round(x,approx)
|
||
|
while x in VI:
|
||
|
x = uniform(min_, max_)
|
||
|
if approx == 0:
|
||
|
x = int(x)
|
||
|
else:
|
||
|
x = round(x,approx)
|
||
|
|
||
|
return x
|
||
|
|
||
|
|
||
|
|
||
|
def fullExo(min_ = -10 , max_ = 10):
|
||
|
"""Generate the whole exo
|
||
|
|
||
|
:param min_: @todo
|
||
|
:param max_: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
template = Template("""
|
||
|
\\begin{equation*}
|
||
|
A = {{type1}} \\qquad B = {{type2}} \\qquad C = {{type3}}
|
||
|
\\end{equation*}
|
||
|
|
||
|
Évaluer $A$, $B$ et $C$ pour $x = {{x1}}$ puis $x = {{x2}}$""")
|
||
|
|
||
|
type1, VI1 = gene_type1(min_, max_)
|
||
|
type2, VI2 = gene_type2(min_, max_)
|
||
|
type3, VI3 = gene_type3(min_, max_)
|
||
|
|
||
|
VI = VI1 + VI2 + VI3
|
||
|
|
||
|
x1, x2 = get_goodX(VI), get_goodX(VI, approx = 1)
|
||
|
|
||
|
info = {"type1": type1, "type2": type2, "type3": type3, "x1":x1, "x2":x2}
|
||
|
|
||
|
exo = template.render(**info)
|
||
|
|
||
|
return exo
|
||
|
|
||
|
def exp1(min_ = -10, max_ = 10, letter = "A"):
|
||
|
"""@todo: Docstring for exp1
|
||
|
|
||
|
:param min: @todo
|
||
|
:param max: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
exp, VI = gene_type1(min_,max_)
|
||
|
x = get_goodX(VI)
|
||
|
|
||
|
tpl = Template("{{A}} = {{exp}} & \\mbox{avec} & x = {{x}}")
|
||
|
|
||
|
return tpl.render(A = letter, exp = exp, x = x)
|
||
|
|
||
|
def exp2(min_ = -10, max_ = 10, letter = "A"):
|
||
|
"""@todo: Docstring for exp1
|
||
|
|
||
|
:param min: @todo
|
||
|
:param max: @todo
|
||
|
:returns: @todo
|
||
|
|
||
|
"""
|
||
|
exp, VI = gene_type2(min_,max_)
|
||
|
x = get_goodX(VI)
|
||
|
|
||
|
tpl = Template("{{A}} = {{exp}} & \\mbox{avec} & x = {{x}}")
|
||
|
|
||
|
return tpl.render(A = letter, exp = exp, x = x)
|
||
|
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
print(fullExo())
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# -----------------------------
|
||
|
# Reglages pour 'vim'
|
||
|
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
||
|
# cursor: 16 del
|