multiply.py
multiply.py
—
Python Source,
5 kB (6027 bytes)
File contents
#! /usr/bin/python
from random import randint
import time, sys
class Multiply(object):
def __init__(self, klass, begin=1, end=10):
self.questionSet = QuestionSet()
self.begin = begin
self.end = end
self.questionCount = 0
self.klass = klass
def setQuestion(self, indexes, value):
self.questionSet.store(indexes, value)
def questionAsked(self, indexes):
return self.questionSet.questionAsked(indexes)
def getNewQuestion(self):
indexes = self.getRandomQuestionIndexes()
while self.questionAsked(indexes):
indexes = self.getRandomQuestionIndexes()
question = self.klass(indexes)
self.setQuestion(indexes, question)
return question
def getRandomQuestionIndexes(self):
first = randint(self.begin, self.end)
second = randint(self.begin, self.end)
return (first, second)
def playAgain(self):
answer = ''
while answer not in ('o', 'n'):
print
print
print 'Veux-tu recommencer ? (o ou n)',
answer = raw_input()
return (answer == 'o')
def initQuestions(self):
print
print
print 'Combien de questions veux-tu ?',
self.questionCount = input()
print
def askQuestions(self):
self.start = time.time()
for i in range(self.questionCount):
question = self.getNewQuestion()
while not question.answered():
print question, '?',
question.ask()
question.evaluate()
question.report()
def report(self):
print
print '%s questions' % self.questionSet.count()
print '%s bonnes reponses' % self.questionSet.correctCount()
print
seconds = round(time.time() - self.start)
minutes = int(seconds // 60)
seconds = int(seconds - minutes * 60)
print 'Temps ecoule: %s minutes %s secondes' % (minutes, seconds)
print
print
class Table(Multiply):
def __init__(self, klass):
super(Table, self).__init__(klass)
self.questionCount = 10
def getRandomQuestionIndexes(self):
second = self.index
first = randint(1, 10)
return (first, second)
def initQuestions(self):
print
print
print 'Quelle table veux-tu ?',
self.index = input()
print
class Squares(Multiply):
def __init__(self, klass):
super(Squares, self).__init__(klass)
self.questionCount = 10
def getRandomQuestionIndexes(self):
first = randint(1, 10)
return (first, )
class BaseQuestion:
def __init__(self, indexes):
first, second = indexes
self.first = first
self.second = second
self.correct = False
self.setResult()
self.answer = None
def setCorrect(self):
self.correct = True
def ask(self):
self.answer = None
try:
self.answer = input()
except SyntaxError:
pass
def answered(self):
return self.answer is not None
def evaluate(self):
if self.answer == self.result:
self.setCorrect()
def report(self):
print
if self.correct:
print 'Bravo'
else:
print 'Non, %s%s' % (self, self.result)
print
print
class MultiplyQuestion(BaseQuestion):
def setResult(self):
self.result = self.first * self.second
def __repr__(self):
return '%s x %s = ' % (self.first, self.second)
class DivideQuestion(BaseQuestion):
def setResult(self):
self.result = self.first
def __repr__(self):
return '%s : %s = ' % (self.first * self.second, self.second)
class SquareQuestion(BaseQuestion):
def __init__(self, indexes):
value = indexes[0]
self.value = value
self.correct = False
self.setResult()
self.answer = None
def setResult(self):
self.result = self.value * self.value
def __repr__(self):
return 'le carre de %s = ' % self.value
class Training:
def choice(self):
print
print
print 'Choix possibles :'
print
print '1) Tables de multiplication une par une'
print
print '2) Toutes les tables de multiplication'
print
print '3) Tables de division une par une'
print
print '4) Toutes les tables de division'
print
print '5) Les carres'
print
print '6) Arreter'
print
print
print 'Que choisis-tu (1-6) ?',
self.index = input()
print
if self.index == 6:
sys.exit(1)
def play(self):
play = True
while play:
mult = self.get_training()
mult.initQuestions()
mult.askQuestions()
mult.report()
play = mult.playAgain()
def get_training(self):
if self.index == 1:
return Table(MultiplyQuestion)
elif self.index == 2:
return Multiply(MultiplyQuestion)
elif self.index == 3:
return Table(DivideQuestion)
elif self.index == 4:
return Multiply(DivideQuestion)
elif self.index == 5:
return Squares(SquareQuestion)
class QuestionSet:
def __init__(self):
self._questions = {}
def store(self, indexes, value):
self._questions[indexes] = value
def questionAsked(self, indexes):
return self._questions.has_key(indexes)
def count(self):
return len(self._questions.items())
def correctCount(self):
result = 0
for indexes, question in self._questions.items():
if question.correct:
result += 1
return result
if __name__ == '__main__':
while True:
tr = Training()
tr.choice()
tr.play()

