Beispiel #1
0
def isValidProblemSubtract(n1, d1, n2, d2):
    if (n1 > d1 or n2 > d2):
        return "For subtraction, numerator must be larger than its corresponding denominator"
    f1 = Fraction(n1, d1)
    nA, dA = f1.fSub(n2, d2)
    if nA < 0:
        return "For subtraction, the answer must be greater than zero"
    return True
Beispiel #2
0
def isValidProblemAdd(n1, d1, n2, d2):
    if d1 == 1 or d2 == 1:
        return "denominator must be greater than 1"
    if n1 > d1 or n2 > d2:
        return "For addition, each numerator must be smaller than its denominator"
    f1 = Fraction(n1, d1)
    f2 = Fraction(n2, d2)
    nAns, dAns = f1.fAdd(f2.numerator, f2.denominator)
    if nAns / dAns > 2:
        return "For addition the answer must be less than 2"
    return True
Beispiel #3
0
 def getProblemDivision(self):
     nAns = -1
     dAns = -1
     while True:
         n1 = random.randint(1,6)
         d1 = random.randint(1,6)
         n2 = random.randint(1,6)
         d2 = random.randint(1,6)
         nAns = n1 * d2
         dAns = d1 * n2
         if d1 == 1 or d2 == 1:
             continue
         #   #if ((nAns) / (dAns)) >= 1: # answer too big, loop again
             continue
         if n1 > d1 or n2 > d2: # if num bigger than denom, loop again
             continue
         if n1 == d1 or n2 == d2: # loop again if fraction == 1
             continue
         if ((n1 * d2) / (d1 * n2) > 2): # do not allow answers greater than 2
             continue
         else:
             break
     answer = Fraction(nAns,dAns)
     self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
     self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
Beispiel #4
0
 def getProblemMultiplication(self):
     nAns = -1
     dAns = -1
     while True:
         n1 = random.randint(1,6)
         d1 = random.randint(1,6)
         n2 = random.randint(1,6)
         d2 = random.randint(1,6)
         nAns = n1 * n2
         dAns = d1 * d2
         if n1 >= d1: # on to next loop b/c mixed fraction, ie 3/2 
             continue
         if n2 >= d2: # same thing, mixed fraction
             continue
         if nAns < dAns:
             break
     # now reduce problem answer
     answer = Fraction(nAns,dAns)
     answer.isImproper()
     if answer.getMix() == True:
         answer.makeMixed()
     #if answer.canReduce():
     #    answer.finalReduce()
     self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
     self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
 def get_answerNumer(self):
     numRectsShadedThird = 0
     numRectsShadedFourth = 0
     totalRectsThird = 0
     totalRectsFourth = 0
     for rect in self.drawablesController.rectangles:
         if rect.ownerID == 3:
             totalRectsThird += 1
             if rect.color != colors.WHITE:
                 numRectsShadedThird += 1
         if rect.ownerID == 4:
             totalRectsFourth += 1
             if rect.color != colors.WHITE:
                 numRectsShadedFourth += 1
     
     f1 = Fraction(numRectsShadedThird,totalRectsThird)
     f2 = Fraction(numRectsShadedFourth,totalRectsFourth)
     sumN, sumD = f1.fAdd(f2.numerator,f2.denominator)
     return sumN
Beispiel #6
0
    def getProblemAddition(self):
        nAns = -1
        dAns = -1
        while True:
            n1 = random.randint(1,6)
            d1 = random.randint(2,6)
            n2 = random.randint(1,6)
            d2 = random.randint(2,6)
            f1 = Fraction(n1, d1)
            f2 = Fraction(n2, d2)
            nAns,dAns = f1.fAdd(f2.numerator,f2.denominator)

            if n1 > d1:
                continue
            if n2 > d2:
                continue
            if nAns/dAns <= 2:
                break
        # now reduce problem answer
        answer = Fraction(nAns,dAns)
        self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
        self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
    def validateAnswerNoWhole(self, numToUse):
        #multx validation
        numAnswer = self.problemDisplay.numeratorAnswer
        denAnswer = self.problemDisplay.denominatorAnswer
        realAnswerFraction = Fraction(numAnswer, denAnswer)

        # check for a zero answer problem
        if numAnswer == numToUse == 0:
            self.hasCorrectAnswer = True
            self.hasReducedAnswer = True
            return
        # check to see if user entered unreduced fraction, if they did-give them credit (for now)
        if numAnswer == numToUse and denAnswer == self.denominatorValue:
            self.hasCorrectAnswer = True
            if realAnswerFraction.canReduce() == False:
                self.hasReducedAnswer = True
            else:
                self.hasReducedAnswer = False
            return
        # check if real answer can be reduced, and if so, reduce it then check against user answer to see if they got correct
        # reduced answer
        if realAnswerFraction.canReduce():
            while (realAnswerFraction.canReduce()):
                realAnswerFraction.finalReduce()
            if realAnswerFraction.numerator == numToUse and realAnswerFraction.denominator == self.denominatorValue:
                self.hasCorrectAnswer = True
                self.hasReducedAnswer = True
                return
        #
        userAnswerFraction = Fraction(numToUse, self.denominatorValue)
        if (userAnswerFraction.canReduce()):
            while (userAnswerFraction.canReduce()):
                userAnswerFraction.finalReduce()
        if realAnswerFraction.numerator == userAnswerFraction.numerator and realAnswerFraction.denominator == userAnswerFraction.denominator:
            self.hasCorrectAnswer = True
            self.hasReducedAnswer = False
            return
    def draw(self):
        if (self.stateManager.getCurrentState() !=
                "Finished"):  # only draw two problem fractions and x symbol
            draw_text(self.operationSymbol, self.font, (0, 0, 0), self.screen,
                      self.xMid, self.yDraw + self.yOffset)
            self.drawFraction(self.numerator1, self.denominator1,
                              self.xMid - self.xOffset)
            self.drawFraction(self.numerator2, self.denominator2,
                              self.xMid + self.xOffset)
            if (self.stateManager.getCurrentState() == "Shading Horizontally"):
                self.userdenominator = self.stateManager.get_answerDenom()
        elif (self.stateManager.getCurrentState() == "Finished"):
            if self.stateManager.operation_type == 2 or self.stateManager.operation_type == 4 or self.stateManager.operation_type == 3:  # division or addition
                self.userdenominator = self.stateManager.get_answerDenom()
            self.usernumerator = self.stateManager.get_answerNumer()
            userAnswer = Fraction(self.usernumerator, self.userdenominator)
            cpuAnswer = Fraction(self.numeratorAnswer, self.denominatorAnswer)
            canreduce = False
            cpucanreduce = False
            ismixed = False
            cpuismixed = False

            if userAnswer.isImproper() == True and cpuAnswer.isImproper(
            ) == True:
                ismixed = True
                cpuismixed = True
                userAnswer.makeMixed()
                cpuAnswer.makeMixed()
                self.leadcoAnswer = cpuAnswer.getLeadC()
                # userAnswer.denominator = cpuAnswer.denominator
            elif userAnswer.canReduce() == True:
                canreduce = True
                # cpucanreduce = True
            elif cpuAnswer.canReduce():
                cpucanreduce = True
            else:
                pass
                # userAnswer.denominator = cpuAnswer.denominator

            if canreduce == True:  # user answer can be reduced so theres 7 total symbols
                userAnswerReduced = Fraction(userAnswer.getNum(),
                                             userAnswer.getDenom())
                userAnswerReduced.finalReduce()
                cpuAnswerReduced = Fraction(cpuAnswer.getNum(),
                                            cpuAnswer.getDenom())
                if cpuAnswerReduced.canReduce():
                    cpuAnswerReduced.finalReduce()
                # if user num and denom match known problem num and denom they got it right -> set isEqualSymbol to =
                if userAnswerReduced.getNum(
                ) == cpuAnswerReduced.getNum() and userAnswerReduced.getDenom(
                ) == cpuAnswerReduced.getDenom():
                    isEqualSymbol = '='
                    self.hasRightAnswer = True
                else:
                    isEqualSymbol = '=/='
                    self.hasRightAnswer = False
                draw_text(isEqualSymbol, self.font, (0, 0, 0), self.screen,
                          self.xMid, self.yDraw + self.yOffset)
                #draw stuff from left of equal sign moving left
                self.drawFraction(self.numerator2, self.denominator2,
                                  self.xMid - self.xOffset)
                draw_text(self.operationSymbol, self.font, (0, 0, 0),
                          self.screen, self.xMid - self.xOffset * 2,
                          self.yDraw + self.yOffset)
                self.drawFraction(self.numerator1, self.denominator1,
                                  self.xMid - self.xOffset * 3)
                #draw stuff from right of equal sign moving right
                self.drawFraction(userAnswer.getNum(), userAnswer.getDenom(),
                                  self.xMid + self.xOffset)
                draw_text('=', self.font, (0, 0, 0), self.screen,
                          self.xMid + self.xOffset * 2,
                          self.yDraw + self.yOffset)
                userAnswerReduced.finalReduce()
                self.drawFraction(userAnswerReduced.getNum(),
                                  userAnswerReduced.getDenom(),
                                  self.xMid + self.xOffset * 3)
                if self.hasRightAnswer:  # draw checkmark
                    self.drawSprite(self.checkmark, True, 0)
                else:
                    self.drawSprite(self.x, True, 0)  # draw x b/c user wrong
            elif ismixed == True or cpuismixed == True:  # user answer is a mixed fraction so there will be 6 symbols
                tempUserAnswer = Fraction(self.usernumerator,
                                          self.userdenominator)
                tempCpuAnswer = Fraction(self.numeratorAnswer,
                                         self.denominatorAnswer)
                if tempUserAnswer.canReduce():
                    tempUserAnswer.finalReduce()
                if tempCpuAnswer.canReduce():
                    tempCpuAnswer.finalReduce()

                if userAnswer.getNum() == cpuAnswer.getNum(
                ) and userAnswer.getDenom() == cpuAnswer.getDenom(
                ) and userAnswer.getLeadC() == cpuAnswer.getLeadC() or (
                        self.usernumerator / self.userdenominator == 1 and
                        self.numeratorAnswer / self.denominatorAnswer == 1 or
                    (tempCpuAnswer.numerator == tempUserAnswer.numerator and
                     tempCpuAnswer.denominator == tempUserAnswer.denominator)):
                    isEqualSymbol = '='
                    self.hasRightAnswer = True
                else:
                    isEqualSymbol = '=/='
                    self.hasRightAnswer = False
                #left side
                self.drawFraction(self.numerator2, self.denominator2,
                                  self.xMid - self.xOffset)
                draw_text(self.operationSymbol, self.font, (0, 0, 0),
                          self.screen, self.xMid - self.xOffset * 2,
                          self.yDraw + self.yOffset)
                self.drawFraction(self.numerator1, self.denominator1,
                                  self.xMid - self.xOffset * 3)
                #right side
                draw_text(isEqualSymbol, self.font, (0, 0, 0), self.screen,
                          self.xMid, self.yDraw + self.yOffset)
                self.drawFractionMixed(userAnswer.getLeadC(),
                                       userAnswer.getNum(),
                                       userAnswer.getDenom(),
                                       self.xMid + self.xOffset)
                if self.hasRightAnswer:  # draw checkmark
                    self.drawSprite(self.checkmark, False, -50)
                else:
                    self.drawSprite(self.x, False,
                                    -50)  # draw x because user wrng
            else:  #canreduce = False so there will be 5 symbols
                tempUserAnswer = Fraction(self.usernumerator,
                                          self.userdenominator)
                if tempUserAnswer.canReduce():
                    tempUserAnswer.finalReduce()
                if userAnswer.getNum(
                ) == self.numeratorAnswer and userAnswer.getDenom(
                ) == self.denominatorAnswer or (
                        self.usernumerator == 0 and self.numeratorAnswer == 0
                        or
                    (tempUserAnswer.numerator == self.numeratorAnswer and
                     tempUserAnswer.denominator == self.denominatorAnswer)):
                    isEqualSymbol = '='
                    self.hasRightAnswer = True
                else:
                    isEqualSymbol = '=/='
                    self.hasRightAnswer = False
                self.drawFraction(
                    self.numerator2, self.denominator2, self.xMid
                )  # draw problem fraction 2 1st because itll be in middle
                draw_text(self.operationSymbol, self.font, (0, 0, 0),
                          self.screen, self.xMid - self.xOffset,
                          self.yDraw + self.yOffset)
                self.drawFraction(self.numerator1, self.denominator1,
                                  self.xMid - self.xOffset * 2)
                draw_text(isEqualSymbol, self.font, (0, 0, 0), self.screen,
                          self.xMid + self.xOffset, self.yDraw + self.yOffset)
                self.drawFraction(userAnswer.getNum(), userAnswer.getDenom(),
                                  self.xMid + self.xOffset * 2)
                if self.hasRightAnswer:  # draw checkmark
                    self.drawSprite(self.checkmark, False, 0)
                else:
                    self.drawSprite(self.x, False,
                                    0)  # draw x because user wrng
Beispiel #9
0
    def getProblemUserGen(self):
        n1 = self.fractionValues[0]
        d1 = self.fractionValues[1]
        n2 = self.fractionValues[2]
        d2 = self.fractionValues[3]

        if self.operationType == "Multiplication":
            nAns = n1 * n2
            dAns = d1 * d2
            answer = Fraction(nAns,dAns)
            self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
            self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
        elif self.operationType == "Subtraction":
            f1 = Fraction(n1, d1)
            f2 = Fraction(n2, d2)
            nA,dA = f1.fSub(n2,d2)
            answer = Fraction(nA,dA)
            self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
            self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
        elif self.operationType == "Division":
            nAns = n1 * d2
            dAns = d1 * n2
            answer = Fraction(nAns,dAns)
            self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
            self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
        elif self.operationType == "Addition":
            f1 = Fraction(n1, d1)
            f2 = Fraction(n2, d2)
            nA,dA = f1.fAdd(n2,d2)
            answer = Fraction(nA,dA)
            self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
            self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)     
Beispiel #10
0
 def getProblemSubtraction(self):
     nAns = -1
     dAns = -1
     while True:
         n1 = random.randint(1,6)
         d1 = random.randint(1,6)
         n2 = random.randint(1,6)
         d2 = random.randint(1,6)
         if n1 >= d1:
             continue
         if n2 >= d2: # same thing, mixed fraction
             continue
         f1 = Fraction(n1, d1)
         f2 = Fraction(n2, d2)
         nA,dA = f1.fSub(n2,d2)
         if nA >= 0:
             break
     
     answer = Fraction(nA,dA)
     answer.isImproper()
     if answer.getMix() == True:
         answer.makeMixed()
     self.currentProblem = FractionProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)
     self.problemDisplay.setProblem(n1,d1,n2,d2,answer.numerator,answer.denominator)