Skip to content

Instantly share code, notes, and snippets.

@oskar456
Last active May 30, 2018 08:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save oskar456/9b918b4233f4a3f4946d06e4da71ecbd to your computer and use it in GitHub Desktop.
Save oskar456/9b918b4233f4a3f4946d06e4da71ecbd to your computer and use it in GitHub Desktop.
Generate a sheet of random math add/subtraction problems for a pre-school child
#!/usr/bin/env python3
import random
import operator
def generate_problem(min_op=1, max_op=9, min_res=0, max_res=10):
operators = [operator.add, operator.sub]
while True:
opa = random.choice(range(min_op, max_op+1))
opb = random.choice(range(min_op, max_op+1))
oper = random.choice(operators)
res = oper(opa, opb)
if min_res <= res <= max_res:
opsign = "+" if oper.__name__ == "add" else "-"
return (opa, opsign, opb)
def generate_problems(num=20):
random.seed()
problems = set()
while len(problems) < num:
p = generate_problem()
if p in problems:
continue
problems.add(p)
yield "{:d} {:s} {:d} =".format(*p)
latex_header=r"""
\documentclass[a4paper,12pt,twocolumn]{exam}
\usepackage[czech]{babel}
\usepackage{xltxtra}
\usepackage{hyperref}
\usepackage{fullpage}
\hypersetup{colorlinks=false,hidelinks}
\setromanfont[Scale=.9]{DejaVu Serif}
\setsansfont[Scale=.9]{DejaVu Sans}
\setmonofont[Scale=.85]{DejaVu Sans Mono}
\begin{document}
\pagestyle{empty}
\Huge
"""
latex_item = r"""
\makebox[.35\textwidth]{{$ {} $\enspace\hrulefill}}
\vspace{{1.5em}}
"""
latex_footer = r"""
\end{document}
"""
def latexout(problems):
print(latex_header)
for p in problems:
print(latex_item.format(p))
print(latex_footer)
def main():
latexout(generate_problems(22))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment