Конвертировать число из любой базы в любую базу - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу написать функцию, которая принимает 3 аргумента.Число - которое будет преобразовано, основание - из которого число должно быть преобразовано, и основание - в какое число должно быть преобразовано (число, fromBase, toBase).Например: функция должна быть в состоянии преобразовать «FF» из шестнадцатеричного значения в десятичное (вывод: 11111111).

Я написал функцию, которая может преобразовывать число из любой базы в 2-10 в и базу в 2-10.Другими словами, он работает до тех пор, пока ему не понадобится любой другой символ, кроме 0-9.Так что это не будет работать с шестнадцатеричными числами.Я написал две другие функции hex_to_dec и dec_to_hex.Например, если мне нужно преобразовать «FF» из шестнадцатеричного в двоичный.Сначала я преобразовал бы «FF» в десятичную, а затем преобразовал ее в двоичную.

def base_convert(number, input_base, output_base, ):
    """Conerts number from base between 1-10 to base between 1-10"""
    if output_base == 16:
        number = base_convert(number, input_base, 10)
        print(number)
        return dec_to_hex(number)
    elif input_base == 16:
        number = hex_to_dec(number)
        return base_convert(number, 10, output_base)
    elif input_base != 16 and output_base != 16:
        result = 0
        power_position = 0
        while number > 0:
            remainder = number % output_base
            result += input_base ** power_position * remainder
            number //= output_base
            power_position += 1
        return result

def dec_to_hex(number):
    "Converts decimal to hex"
    dec_key = {0:"0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7",
               8: "8", 9: "9", 10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F"}
    remainder_list = []
    result = ""
    while number > 0:
        remainder = number % 16
        remainder_list.append(remainder)
        number //= 16

    for i in reversed(remainder_list):
        i = dec_key[i]
        result += i

    return result

def hex_to_dec(number):
    transformed_keys = []
    dec_key = {"0": 0, "1":1 , "2": 2 ,  "3": 3, "4": 4 , "5": 5 , "6": 6 , "7": 7 , "8": 8, "9": 9, "A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15}
    for i in number:
        transformed_keys.append(dec_key[i])
    result = 0
    power = 0
    while transformed_keys:
        remainder = transformed_keys[-1]
        result += 16 ** power * remainder
        transformed_keys.pop(-1)
        power += 1
    return result

print(base_convert("FF", 16, 2))

Однако я почти уверен, что это неверный путь.Лучшее решение будет использовать только 1 функцию и конвертировать прямо.Кроме того, он может конвертировать из любой базы (11, 12, 13, 100, 100000) в любую базу.

...