diff --git a/palindrome.py b/palindrome.py index e255d35..fe4deeb 100644 --- a/palindrome.py +++ b/palindrome.py @@ -12,22 +12,25 @@ def parse_args(): 'transform it into a' 'palindrome')) parser.add_argument('-i', - '--int', + '--integer', required=True, help='The integer to be transformed.', type=int) # NOTE: The argument must be an integer. Because of this constrain integers - # with leading zeroes will be stripped automatically in python 3. + # with leading zeroes will be stripped automatically in python 3. Also the + # script only allows integers as an input defined by type=int args = parser.parse_args() return args def main(): args = parse_args() - if args.int <= 10000 and args.int > 0: - print('Input integer is: {}'.format(args.int)) + if args.integer <= 10000 and args.integer > 0: + print('Input integer is: {}'.format(args.integer)) transform = Transform() - palindrome = transform.palindrome(args.int) + palindrome = transform.palindrome(args.integer) + if palindrome == transform.INVALID_RETURN_VALUE: + print('Palindrome to be calculated is to big. Abort!') print("Final Output is:", palindrome) return palindrome else: diff --git a/transform/Transform.py b/transform/Transform.py index ac926bc..a226fc2 100644 --- a/transform/Transform.py +++ b/transform/Transform.py @@ -2,56 +2,57 @@ # -*- coding: utf-8 -*- class Transform(object): """Class to transform a given integer into a palindrome""" + # to avoid magic numbers. + MAXIMUM_INPUT_VALUE = 1000000000 + INVALID_RETURN_VALUE = -1 def __init__(self): super(Transform, self).__init__() - def palindrome(self, int): + def palindrome(self, integer): ''' - Kind of the main function. Checks if input int is already a palindrome - and trys calculation one if input integer is not already a palindrome. + The main function. Checks if input integer is already a palindrome + and trys calculating one if input integer is not already a palindrome. ''' - self.input_int = int - if self.__is_palindrome(self.input_int): - print('Integer {} is a palindrome'.format(self.input_int)) - return self.input_int + self.input_integer = integer + if self.__is_palindrome(self.input_integer): + print('Integer {} is a palindrome'.format(self.input_integer)) + return self.input_integer else: - print('Integer {} is not a palindrome'.format(self.input_int)) - print('Calculating the palindrome for input {}'.format(self.input_int)) + print('Integer {} is not a palindrome'.format(self.input_integer)) + print('Calculating the palindrome for input {}'.format(self.input_integer)) palindrome = self.__calculate_palindrome() return palindrome # The following methods are private. Signaled by the leading __ def __is_palindrome(self, int_to_check): - reversed = self.__reverese_int(int_to_check) - if self.input_int == reversed: + reversed_integer = self.__reverese_int(int_to_check) + if self.input_integer == reversed_integer: return True else: return False def __reverese_int(self, int_to_reverse): - reversed = 0 + reversed_integer = 0 int_to_check = int_to_reverse while int_to_check > 0: reminder = int_to_check % 10 - reversed = (reversed * 10) + reminder + reversed_integer = (reversed_integer * 10) + reminder int_to_check = int_to_check // 10 - return reversed + return reversed_integer def __calculate_palindrome(self): - reversed = self.__reverese_int(self.input_int) - self.input_int = self.input_int + reversed - print('Possible palindrome is {}'.format(self.input_int)) - - if self.__is_palindrome(self.input_int) is True: - return self.input_int - - if self.__is_palindrome(self.input_int) is False: - return self.__try_again() - - def __try_again(self): - while self.input_int <= 1000000000: - self.__calculate_palindrome() - if self.input_int >= 1000000000: - print('Palindrome to be calculated is to big. Abort!') - return -1 + reversed_integer = self.__reverese_int(self.input_integer) + self.input_integer = self.input_integer + reversed_integer + print('Possible palindrome is {}'.format(self.input_integer)) + if self.__is_palindrome(self.input_integer) is True: + print('Possible palindrome is correct!') + return self.input_integer + elif not self.__is_palindrome(self.input_integer): + print('Possible palindrome is wrong! Calcualte again!') + while not self.__is_palindrome(self.input_integer): + if self.input_integer >= self.MAXIMUM_INPUT_VALUE: + return self.INVALID_RETURN_VALUE + else: + self.__calculate_palindrome() + return self.input_integer