# Application Program: Test of ability with arithmetic english demo

```#!/bin/python
# mathsQuiz.py
# date: 09/08/2006 version 1.0
# author: Mesar Hameed <olpcmathsquiz.20.nospamthx@xoxy.net>

# a quick mockup program to illustrate/bounce ideas for starters to
# Application Program: Test of ability with arithmetic - OLPC
# http://wiki.laptop.org/go/Application_Program:_Test_of_ability_with_arithmetic

# what needs doing:
# level 9 is missing
# think about possible ways of creating translations in a plugable fashion
# either as command line argument or as compile time option
# tk gui, make it all pretty and sugary
# test on sugar platform

import sys
import random
import timing

nq=10 #number of questions per round

result = []
for curr in range(nq):
a,b = random.randrange(minval,maxval),random.randrange(minval,maxval)
c=a+b
result.append(a), result.append('+')
result.append(b), result.append(c)
result.insert(0,lvl)
return result

def subtraction(lvl,nq,minval,maxval,simplified=False):
result = []
for curr in range(nq):
a,b = random.randrange(minval,maxval),random.randrange(minval,maxval)
if simplified and b>a:
a,b=b,a
c=a-b
result.append(a), result.append('-')
result.append(b), result.append(c)
result.insert(0,lvl)
return result

def multiplicationTable(lvl,nq,maxval,division=False):
result = []
for curr in range(nq):
a,b = random.randrange(0,maxval),random.randrange(0,maxval)
c=a*b
if division:
if c==0 and a==0:
a,b,c=c,b,a
if c==0 and b==0:
a,b,c=b,a,c
result.append(c), result.append('/')
result.append(b), result.append(a)
else:
result.append(a), result.append('*')
result.append(b), result.append(c)
result.insert(0,lvl)
return result

def playround(questions):
name=questions.pop(0)
print "playing the maths quiz, level ", name
nq=len(questions)/4
timing.start()
while len(questions) != 0:
qid="("+str(1+nq-len(questions)/4)+"/"+str(nq)+") "
q =qid + str(questions)+ " " + str(questions) + " " + str(questions) + " = "
inputhandler(q,questions)
del questions[:4]
#end loop
timing.finish()
print "Well done!, you completed the level in ",round((timing.milli()/1000.0),2), "seconds"

counter = ans=0
while counter < attempts:
try:
ans=raw_input(prompt)
if ans == "exit" :
verifyExit()
ans="0"
counter-=1
if str(ans) in str(expectedAnswer) and str(ans) != "":
return ans
except ValueError:
counter+=1
continue
counter+=1
return 0

def verifyExit():
try:
quit=raw_input("Are you sure you wish to exit? [y/n]: ")
if quit == "y":
print "thankyou for playing the maths quiz."
sys.exit()
except:
print "goodbye"
sys.exit()

def welcome():
print "Welcome to OLPC maths quiz!\thttp://www.laptop.org"
print "Have a play, and see how far you can get.\n\n"
print "1, level 1: basic addition (to 20)"
print "2, level 2: basic subtraction (from 20)"
print "3, level 3: intermediate addition (to 200)"
print "4, level 4: intermediate subtraction (from 100)"
print "5, level 5: addition of negative numbers"
print "6, level 6: mixture of negative and posative numbers"
print "7, level 7: multiplication table. ( to 12*12)"
print "8, level 8: basic division"
print "Type exit at any point to quit."

while True:
print "there are 8 levels, which level do you want to play?"
lvl=inputhandler("1 -- 8? ",range(1,9))
if lvl == "1":
elif lvl == "2":
questions=subtraction(2,nq,0,20,1)
elif lvl == "3":
elif lvl == "4":
questions=subtraction(4,nq,0,100,1)
elif lvl == "5":