Я хочу написать функцию, которая принимает 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) в любую базу.