diff --git a/mathgenerator/funcs/__init__.py b/mathgenerator/funcs/__init__.py index ee7e054..dd0ba11 100644 --- a/mathgenerator/funcs/__init__.py +++ b/mathgenerator/funcs/__init__.py @@ -98,3 +98,4 @@ from .is_prime import * from .bcd_to_decimal import * from .complex_to_polar import * from .set_operation import * +from .base_conversion import * diff --git a/mathgenerator/funcs/baseConversion.py b/mathgenerator/funcs/baseConversion.py deleted file mode 100644 index 77eae14..0000000 --- a/mathgenerator/funcs/baseConversion.py +++ /dev/null @@ -1,42 +0,0 @@ -from .__init__ import * - -#base from 2 to 36 -alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - -def fromBaseTenTo(n,toBase): - assert type(toBase)==int and toBase>=2 and toBase<=36, "toBase({}) must be >=2 and <=36" - # trivial cases - if toBase==2: - return bin(n)[2:] - elif toBase==8: - return oct(n)[2:] - elif toBase==10: - return str(n) - elif toBase==16: - return hex(n)[2:].upper() - res = alpha[n%toBase] - n = n//toBase - while n>0: - res = alpha[n%toBase] + res - n = n//toBase - return res - -# Useful to check answers, but not needed here -# def toBaseTen(n,fromBase): -# return int(n,fromBase) - -def baseConversion(maxNum = 60000, maxBase = 16): - assert type(maxNum)==int and maxNum>=100 and maxNum<=65536, "maxNum({}) must be >=100 and <=65536".format(maxNum) - assert type(maxBase)==int and maxBase>=2 and maxBase<=36, "maxBase({}) must be >= 2 and <=36".format(maxBase) - - n = random.randint(40,maxNum) - dist = [10]*10+[2]*5+[16]*5+[i for i in range(2,maxBase+1)] - # set this way since converting to/from bases 2,10,16 are more common -- can be changed if needed. - bases = random.choices(dist,k=2) - while bases[0]==bases[1]: - bases = random.choices(dist,k=2) - - problem = "Convert {} from base {} to base {}.".format(fromBaseTenTo(n,bases[0]),bases[0],bases[1]) - ans = fromBaseTenTo(n,bases[1]) - return problem, ans - diff --git a/mathgenerator/funcs/base_conversion.py b/mathgenerator/funcs/base_conversion.py new file mode 100644 index 0000000..c9ef48f --- /dev/null +++ b/mathgenerator/funcs/base_conversion.py @@ -0,0 +1,50 @@ +from .__init__ import * + +# base from 2 to 36 +alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + +def fromBaseTenTo(n, toBase): + assert type(toBase) == int and toBase >= 2 and toBase <= 36, "toBase({}) must be >=2 and <=36" + # trivial cases + if toBase == 2: + return bin(n)[2:] + elif toBase == 8: + return oct(n)[2:] + elif toBase == 10: + return str(n) + elif toBase == 16: + return hex(n)[2:].upper() + res = alpha[n % toBase] + n = n//toBase + while n > 0: + res = alpha[n % toBase] + res + n = n//toBase + return res + +# Useful to check answers, but not needed here +# def toBaseTen(n,fromBase): +# return int(n,fromBase) + + +def baseConversionFunc(maxNum=60000, maxBase=16): + assert type( + maxNum) == int and maxNum >= 100 and maxNum <= 65536, "maxNum({}) must be >=100 and <=65536".format(maxNum) + assert type( + maxBase) == int and maxBase >= 2 and maxBase <= 36, "maxBase({}) must be >= 2 and <=36".format(maxBase) + + n = random.randint(40, maxNum) + dist = [10]*10+[2]*5+[16]*5+[i for i in range(2, maxBase+1)] + # set this way since converting to/from bases 2,10,16 are more common -- can be changed if needed. + bases = random.choices(dist, k=2) + while bases[0] == bases[1]: + bases = random.choices(dist, k=2) + + problem = "Convert {} from base {} to base {}.".format( + fromBaseTenTo(n, bases[0]), bases[0], bases[1]) + ans = fromBaseTenTo(n, bases[1]) + return problem, ans + + +base_conversion = Generator("Base Conversion", 94, "Convert 152346 from base 8 to base 10.", "54502", + baseConversionFunc) diff --git a/test.py b/test.py index 07b6b87..cc34a10 100644 --- a/test.py +++ b/test.py @@ -10,4 +10,4 @@ for item in list: print(item[2]) # print(mathgen.getGenList()) -print(mathgen.genById(92)) +print(mathgen.genById(94))