def substitution(self, nr, base): ''' the substitution method in: ->nr: number type ->base:an integer number out: the result (a number type) ''' res = Number("0", base) need = Number("", base) a1 = [] if need.stringToInt(nr.get_number()) < base: #if the number is smaller than the base then it is a digit for this base res.set_number( self.op.intToString(need.stringToInt(nr.get_number()))) else: a1 = need.digits(nr.get_number()) p = 0 need = Number("", 10) while a1 != []: copy = p strBase = self.op.intToString(nr.get_base()) power = '1' while copy != 0: power = self.op.mulNumbers(power, strBase, base).get_number() copy -= 1 digit = a1[-1] product = self.op.mulNumbers(power, digit, base) p += 1 res.set_number( self.op.addNumbers(res.get_number(), product.get_number(), base).get_number()) a1 = a1[:-1] return res
def testNumber(): nr=Number("100",2) assert nr.get_number()=="100" assert nr.get_base()==2 nr.set_number("12") assert nr.get_number()=="12" nr.set_base(10) assert nr.get_base()==10 nr2=Number("12",10) assert nr==nr2 array=nr.digits(nr.get_number()) assert array==["1","2"] char='A' assert nr.modifyChar(char)==10 assert nr.stringToInt(char)==10 char="1" assert nr.stringToInt(char)==1
def show(self): while True: print( " ~ Monica Olanescu 's application ~" ) print("====Main menu====") print("1.Operations") print("2.Conversions") print("0.Exit\n") cmd = input("Give the command:") try: self.__commValid.validateCommand(cmd, 2) cmd = int(cmd) if cmd == 0: break elif cmd == 1: while True: print("--Operations menu--") print("1.Add") print("2.Decrease") print("3.Multiply with a digit") print("4.Division by a digit") print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand(cmd, 4) cmd = int(cmd) if cmd == 0: break elif cmd == 1: print("--Add menu--") print( "1.Add two numbers in one of number's base" ) print("2.Add two numbers in a different base") print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand(cmd, 2) cmd = int(cmd) if cmd == 0: break elif cmd == 1: try: nr = input( "Give the first number:") base = input("Give its base:") nr1 = Number(nr, base) self.__nrValid.validateNumber(nr1) nr1.set_base(int(base)) try: nr = input( "Give the another number:") base = input("Give its base:") nr2 = Number(nr, base) self.__nrValid.validateNumber( nr2) nr2.set_base(int(base)) print("The sum is :" + self.addTwoNr(nr1, nr2). get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 2: try: nr = input( "Give the first number:") base = input("Give its base:") nr1 = Number(nr, base) self.__nrValid.validateNumber(nr1) nr1.set_base(int(base)) try: nr = input( "Give the second number:") base = input("Give its base:") nr2 = Number(nr, base) self.__nrValid.validateNumber( nr2) nr2.set_base(int(base)) base = input( "Give the base on which the operations will be done:" ) try: self.__nrValid.validateBase( base) base = int(base) print("The sum is " + self. addTwoNumberDifBase( nr1, nr2, base ).get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) elif cmd == 2: while True: print("--Decrease menu--") print( "1.Decrease two numbers in one of number's base" ) print( "2.Decrease two numbers in a different base" ) print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand( cmd, 2) cmd = int(cmd) if cmd == 0: break elif cmd == 1: try: nr = input( "Give the first number:") base = input("Give its base:") nr1 = Number(nr, base) self.__nrValid.validateNumber( nr1) nr1.set_base(int(base)) try: nr = input( "Give the another number:" ) base = input( "Give its base:") nr2 = Number(nr, base) self.__nrValid.validateNumber( nr2) nr2.set_base(int(base)) try: print( "The difference is :" + self.decrTwoNr( nr1, nr2 ).get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 2: try: nr = input( "Give the first number:") base = input("Give its base:") nr1 = Number(nr, base) self.__nrValid.validateNumber( nr1) nr1.set_base(int(base)) try: nr = input( "Give the second number:" ) base = input( "Give its base:") nr2 = Number(nr, base) self.__nrValid.validateNumber( nr2) nr2.set_base(int(base)) base = input( "Give the base on which the operations will be done:" ) try: self.__nrValid.validateBase( base) base = int(base) try: self.__nrValid.decreasesValidation( nr1.get_number( ), nr2.get_number( )) print( "The difference is :" + self. decrTwoNumberDifBase( nr1, nr2, base ).get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) elif cmd == 3: while True: print("--Multiply menu--") print( "1.Multiply a number with a digit in the number's base" ) print( "2.Multiply a number with a digit in a different base" ) print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand( cmd, 2) cmd = int(cmd) if cmd == 0: break elif cmd == 1: try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber( nr) nr.set_base(int(base)) try: digit = input( "Give the digit:") self.__nrValid.validateDigitB( digit, base) print("The product is :" + self.multiplyD( nr, digit ).get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 2: try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber( nr) nr.set_base(int(base)) try: digit = input( "Give the digit:") self.__nrValid.validateDigit( digit) base = input( "Give the base on which the operations will be done:" ) try: self.__nrValid.validateBase( base) base = int(base) print( "The product is :" + self.multiplyDiff( nr, digit, base ).get_number()) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) elif cmd == 4: while True: print("--Division menu--") print( "1.Divide a number with a digit in the number's base" ) print( "2.Divide a number with a digit in a different base" ) print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand( cmd, 2) cmd = int(cmd) if cmd == 0: break elif cmd == 1: try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber( nr) nr.set_base(int(base)) try: digit = input( "Give the digit:") self.__nrValid.validateDigitB( digit, base) q, r = self.divideD( nr, digit) print( "The quotient is :" + q.get_number() + " and the remainder:" + r + ".\n") except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 2: try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber( nr) nr.set_base(int(base)) try: digit = input( "Give the digit:") self.__nrValid.validateDigit( digit) base = input( "Give the base on which the operations will be done:" ) try: self.__nrValid.validateBase( base) base = int(base) q, r = self.divideDDiff( nr, digit, base) print( "The quotient is :" + q.get_number() + " and the remainder:" + r + ".\n") except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) elif cmd == 2: while True: print("--Conversions menu--") print("1.Successive division method") print("2.Substitution method") print("3.Fast conversions between 2,4,16 base") print("4.Conversions with an intermediary base") print("0.Back\n") cmd = input("Give the command:") try: self.__commValid.validateCommand(cmd, 4) cmd = int(cmd) if cmd == 0: break elif cmd == 1: print( "Successive division method works better when the number's base is bigger than the base on which we want to convert!" ) try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber(nr) nr.set_base(int(base)) try: base = input( "Give the base in which the number will be converted:" ) self.__nrValid.validateBase(base) base = int(base) self.__methValid.validateDivision( nr, base) print("The converted number is " + self.convertDiv( nr, base).get_number() + "!\n") except methodExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 2: print( "Substitution method works better when the number's base is bigger than the base on which we want to convert!" ) try: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) self.__nrValid.validateNumber(nr) nr.set_base(int(base)) try: base = input( "Give the base in which the number will be converted:" ) self.__nrValid.validateBase(base) base = int(base) self.__methValid.validateSubstition( nr, base) print("The converted number is " + self.convertSubstitution( nr, base).get_number() + "!\n") except validationExceptions as ex: print(ex) except methodExceptions as ex: print(ex) except validationExceptions as ex: print(ex) elif cmd == 3: print( "Fast conversions works only between 2,4,8 and 16 base!" ) print( "Take care to have every time a base as a power to the other one!\n Ex: 4=2^2 ; 8=2^3 ;16=4^2 \n " ) nr = input("Give the number:") base = input("Give the base:") nr = Number(nr, base) try: self.__nrValid.validateNumber(nr) base = int(base) nr.set_base(base) try: base = input( "Give the base in which the number will be converted:" ) self.__nrValid.validateBase(base) base = int(base) self.__methValid.validateBasesFast( base, nr.get_base()) self.__methValid.validateFast(base) print("The converted number is " + self.fastConversions( nr, base).get_number() + "!\n") except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except methodExceptions as ex: print(ex) elif cmd == 4: nr = input("Give the number:") base = input("Give its base:") nr = Number(nr, base) try: self.__nrValid.validateNumber(nr) base = int(base) nr.set_base(base) try: intermediary = input( "Give the intermediary base:") self.__nrValid.validateBase( intermediary) intermediary = int(intermediary) base = input( "Give the base in which the number will be converted:" ) self.__nrValid.validateBase(base) base = int(base) intermediaryNumber, finalNumber = self.conversionsIntermediaryBase( nr, intermediary, base) print( "The converted number in intermediary base is: " + intermediaryNumber.get_number() + "!") print("The converted number is " + finalNumber.get_number() + "!\n") except validationExceptions as ex: print(ex) except validationExceptions as ex: print(ex) except methodExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex) except commandValidationExceptions as ex: print(ex)