def genExpression(self, size): ''' generates an expression ''' oprPDF = [0.35, 0.20, 0.30, 0.15] numRange = [(1, 9), (9, 15), (15, 25)] numPDF = [0.5, 0.4, 0.1] n1 = round(maths.weightedRandomRange(numPDF, numRange)) if size == 1: return str(n1) if size > 2: print('Not implemented') # size = 2 if maths.isPrime(n1): opr = self.operators[maths.weightedRandomIndex( [0.4, 0.25, 0.33, 0.02])] else: opr = self.operators[maths.weightedRandomIndex(oprPDF)] n2 = maths.getSecondOperand(n1, opr, multiplyLimit=200, numPDF=numPDF, numRange=numRange) return str(n1) + ' ' + opr + ' ' + str(n2)
def genExpression(self, size): ''' Generate the expression ''' oprPDF = [0.35, 0.20, 0.30, 0.15] numRange = [(1, 9), (9, 19), (19, 35)] numPDF = [0.5, 0.35, 0.15] if size == 2: exp = self.genExpression2(oprPDF) elif size == 3: exp1 = self.genExpression2(oprPDF) ans1 = eval(''.join(str(i) for i in exp1)) opr = self.operators[maths.weightedRandomIndex( [0.4, 0.2, 0.3, 0.1])] exp2 = maths.getSecondOperand(ans1, opr, multiplyLimit=150, numPDF=numPDF, numRange=numRange) exp = ['('] + exp1 + [')'] + [opr, exp2] elif size == 4: exp1 = self.genExpression2(oprPDF) exp2 = self.genExpression2(oprPDF) exp = ['('] + exp1 + [')'] + ['+'] + ['('] + exp2 + [')'] expStr = ' '.join(str(i) for i in exp) return (expStr, round(eval(expStr)))
def genExpression2(self, oprPDF): index = maths.weightedRandomIndex(oprPDF) numRange = [(1,9) , (9,19) , (19,35)] numPDF = [0.5, 0.35, 0.15] n1 = round(maths.weightedRandomRange(numPDF, numRange)) opr = self.operators[index] n2 = maths.getSecondOperand(n1, opr, multiplyLimit = 100, numPDF = [0.2, 0.4, 0.3], numRange = numRange) if opr == '+': numPDF = [0.2, 0.4, 0.4] n1 = round(maths.weightedRandomRange(numPDF, numRange)) return [n1, opr, n2]
def genExpression2(self, oprPDF): index = maths.weightedRandomIndex(oprPDF) numRange = [(1, 9), (9, 19), (19, 35)] numPDF = [0.5, 0.35, 0.15] n1 = round(maths.weightedRandomRange(numPDF, numRange)) opr = self.operators[index] n2 = maths.getSecondOperand(n1, opr, multiplyLimit=100, numPDF=[0.2, 0.4, 0.3], numRange=numRange) if opr == '+': numPDF = [0.2, 0.4, 0.4] n1 = round(maths.weightedRandomRange(numPDF, numRange)) return [n1, opr, n2]
def genExpression(self, size): ''' generates an expression ''' oprPDF = [0.35, 0.20, 0.30, 0.15] numRange = [(1,9) , (9,15) , (15,25)] numPDF = [0.5, 0.4, 0.1] n1 = round(maths.weightedRandomRange(numPDF, numRange)) if size == 1: return str(n1) if size > 2: print('Not implemented') # size = 2 if maths.isPrime(n1): opr = self.operators[ maths.weightedRandomIndex([0.4, 0.25, 0.33, 0.02]) ] else: opr = self.operators[ maths.weightedRandomIndex(oprPDF) ] n2 = maths.getSecondOperand(n1, opr, multiplyLimit = 200, numPDF = numPDF, numRange = numRange) return str(n1) + ' ' + opr + ' ' + str(n2)
def genExpression(self, size): ''' Generate the expression ''' oprPDF = [0.35, 0.20, 0.30, 0.15] numRange = [(1,9) , (9,19) , (19,35)] numPDF = [0.5, 0.35, 0.15] if size == 2: exp = self.genExpression2(oprPDF) elif size == 3: exp1 = self.genExpression2(oprPDF) ans1 = eval(''.join(str(i) for i in exp1)) opr = self.operators[ maths.weightedRandomIndex([0.4, 0.2, 0.3, 0.1]) ] exp2 = maths.getSecondOperand(ans1, opr, multiplyLimit = 150, numPDF = numPDF, numRange = numRange) exp = ['('] + exp1 + [')'] + [opr, exp2] elif size == 4: exp1 = self.genExpression2(oprPDF) exp2 = self.genExpression2(oprPDF) exp = ['('] + exp1 + [')'] + ['+'] + ['('] + exp2 + [')'] expStr = ' '.join( str(i) for i in exp ) return (expStr, round(eval(expStr)))