Application Program: Test of ability with arithmetic english demo: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 6: | Line 6: | ||
# date: 09/08/2006 version 1.0 |
# date: 09/08/2006 version 1.0 |
||
# author: Mesar Hameed <olpcmathsquiz.20.nospamthx@xoxy.net> |
# author: Mesar Hameed <olpcmathsquiz.20.nospamthx@xoxy.net> |
||
# |
# License: Attribution-ShareAlike 2.5 or later |
||
# a quick mockup program to illustrate/bounce ideas for starters to |
# a quick mockup program to illustrate/bounce ideas for starters to |
||
Line 15: | Line 15: | ||
# what needs doing: |
# what needs doing: |
||
# level 9 is missing |
# level 9 is missing |
||
# think about possible ways of creating translations in a plugable |
# think about possible ways of creating translations in a plugable fashion |
||
# either as command line argument or as compile time option |
# either as command line argument or as compile time option |
||
# tk gui, make it all pretty and sugary |
# tk gui, make it all pretty and sugary |
||
Line 28: | Line 28: | ||
def addition(lvl,nq,minval,maxval): |
def addition(lvl,nq,minval,maxval): |
||
curr=0 |
|||
result = [] |
result = [] |
||
for curr in range(nq): |
|||
a,b = random.randrange(minval,maxval |
a,b = random.randrange(minval,maxval),random.randrange(minval,maxval) |
||
c=a+b |
c=a+b |
||
result.append(a), result.append('+') |
result.append(a), result.append('+') |
||
result.append(b), result.append(c) |
result.append(b), result.append(c) |
||
curr = curr +1 |
|||
result.insert(0,lvl) |
result.insert(0,lvl) |
||
return result |
return result |
||
def subtraction(lvl,nq,minval,maxval,simplified= |
def subtraction(lvl,nq,minval,maxval,simplified=False): |
||
curr=0 |
|||
result = [] |
result = [] |
||
for curr in range(nq): |
|||
a,b = random.randrange(minval,maxval |
a,b = random.randrange(minval,maxval),random.randrange(minval,maxval) |
||
if simplified and b>a: |
if simplified and b>a: |
||
a,b=b,a |
a,b=b,a |
||
Line 50: | Line 47: | ||
result.append(a), result.append('-') |
result.append(a), result.append('-') |
||
result.append(b), result.append(c) |
result.append(b), result.append(c) |
||
curr = curr +1 |
|||
result.insert(0,lvl) |
result.insert(0,lvl) |
||
return result |
return result |
||
def multiplicationTable(lvl,nq,maxval,division= |
def multiplicationTable(lvl,nq,maxval,division=False): |
||
curr=0 |
|||
result = [] |
result = [] |
||
for curr in range(nq): |
|||
a,b = random.randrange(0,maxval |
a,b = random.randrange(0,maxval),random.randrange(0,maxval) |
||
c=a*b |
c=a*b |
||
if division: |
if division: |
||
Line 71: | Line 66: | ||
result.append(a), result.append('*') |
result.append(a), result.append('*') |
||
result.append(b), result.append(c) |
result.append(b), result.append(c) |
||
curr = curr +1 |
|||
result.insert(0,lvl) |
result.insert(0,lvl) |
||
return result |
return result |
||
Line 84: | Line 78: | ||
q =qid + str(questions[0])+ " " + str(questions[1]) + " " + str(questions[2]) + " = " |
q =qid + str(questions[0])+ " " + str(questions[1]) + " " + str(questions[2]) + " = " |
||
inputhandler(q,questions[3]) |
inputhandler(q,questions[3]) |
||
questions[:4 |
del questions[:4] |
||
#end loop |
#end loop |
||
timing.finish() |
timing.finish() |
||
Line 97: | Line 91: | ||
verifyExit() |
verifyExit() |
||
ans="0" |
ans="0" |
||
counter-=1 |
|||
if str(ans) in str(expectedAnswer) and str(ans) != "": |
if str(ans) in str(expectedAnswer) and str(ans) != "": |
||
return ans |
return ans |
||
except ValueError: |
except ValueError: |
||
counter+=1 |
|||
continue |
continue |
||
counter+=1 |
|||
print "the correct answer is ",expectedAnswer |
print "the correct answer is ",expectedAnswer |
||
return 0 |
return 0 |
||
Line 131: | Line 125: | ||
print "Type exit at any point to quit." |
print "Type exit at any point to quit." |
||
while |
while True: |
||
print "there are 8 levels, which level do you want to play?" |
print "there are 8 levels, which level do you want to play?" |
||
lvl=inputhandler("1 -- 8? ",range(1,9)) |
lvl=inputhandler("1 -- 8? ",range(1,9)) |
Latest revision as of 01:29, 15 March 2010
#!/bin/python # mathsQuiz.py # date: 09/08/2006 version 1.0 # author: Mesar Hameed <olpcmathsquiz.20.nospamthx@xoxy.net> # License: Attribution-ShareAlike 2.5 or later # 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 def addition(lvl,nq,minval,maxval): 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[0])+ " " + str(questions[1]) + " " + str(questions[2]) + " = " inputhandler(q,questions[3]) del questions[:4] #end loop timing.finish() print "Well done!, you completed the level in ",round((timing.milli()/1000.0),2), "seconds" def inputhandler (prompt,expectedAnswer="",attempts=3): 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 print "the correct answer is ",expectedAnswer 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": questions=addition(1,nq,0,10) elif lvl == "2": questions=subtraction(2,nq,0,20,1) elif lvl == "3": questions=addition(3,nq,0,50) elif lvl == "4": questions=subtraction(4,nq,0,100,1) elif lvl == "5": questions=addition(5,nq,-100,0) elif lvl == "6": questions=subtraction(6,nq,0,100,0) elif lvl == "7": questions=multiplicationTable(7,nq,12) elif lvl == "8": questions=multiplicationTable(8,nq,12,1) #this actually does divisions within the multiplication table. playround(questions) welcome()