Не используя len(), все модули подключаемые, а также //, %, &, >>, <<, написать функцию конвертации из 2-ой СС в16-ую и наоборот
Задание с сайта Codewars https://www.codewars.com/kata/55d1b0782aa1152115000037/train/python
Короче нужна функция конвертации (я нашёл несколько разных решений
данной ката и сам написал код) но вот в чём БЕДА.Автор Ката в конце
задания приписал как бы вскользь следующее "О, и я отключил несколько
вещей."
При проверке кода на сервере оказалось что нельзя использовать bin(), hex() и другие функции прописал в вопросе их
Пришлось просить помощи, потому как сдаю на сервер и прилетает вот такое
function has been disabled for this Kata
STDERR
Traceback (most recent call last):
File "main.py", line 3, in <module>
File "/home/codewarrior/solution.py", line 16, in bin_to_hex
TypeError: unsupported format string passed to NoneType.__format__
Вот перевод задания через Google
Определите две функции: hex_to_bin и bin_to_hex (или hextobin и binthex)
hex_to_bin.
Принимает шестнадцатеричную строку в качестве аргумента.
Примечание. Эта строка может содержать верхние или нижние буквы и начать с любого количества нулей.
Возвращает двоичное представление (без ведущих нулей) численного значения шестнадцатеричной строки.
Примеры:
"00f" -> "1111"
"5" -> "101"
"00000" -> "0"
"04d2" -> "10011010010"
bin_to_hex.
Берет двоичную строку (с ведущими нулями или без него) в качестве аргумента.
Возвращает шестнадцатеричное представление численного значения двоичной строки.
Примечание. Любые не численные символы должны быть строчными
Примеры:
"1111" -> "f"
"000101" -> "5"
"10011010010" -> "4d2"
Примечание. Вы можете предположить, что все аргументы действительны, так что нет необходимости в проверке ошибок.
О, и я отключил несколько вещей.
За качество перевода не ручаюсь.
Может не понял задание до конца - но все таки интересно как без
"завсегдашных-друзей-инструментов" наших операторов, встроенных функций решить задание
Примеры кода с перечисленными операторами и встроенными функциями не предлагать!
Я вроде все проверил - но попробуйте сдать на сайте Codewars
Вот из дискуссии с сайта некоторые высказывания:
В Python:
int отключен, но тип (0) включен
Hex / Bin отключен, но форматирование строки включено
Описание не говорит, какие функции отключены.
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Вот так, например:
def no_leading_zeros(string):
while True:
try:
if string[0] == '0':
string = string[1:]
else:
return string
except IndexError:
return '0'
def hex_to_bin(string):
repl = {
'0': '0000',
'1': '0001',
'2': '0010',
'3': '0011',
'4': '0100',
'5': '0101',
'6': '0110',
'7': '0111',
'8': '1000',
'9': '1001',
'a': '1010',
'b': '1011',
'c': '1100',
'd': '1101',
'e': '1110',
'f': '1111',
}
return no_leading_zeros(''.join(repl[k] for k in string.lower()))
def bin_to_hex(string):
repl = {
'0': '0',
'1': '1',
'10': '2',
'11': '3',
'100': '4',
'101': '5',
'110': '6',
'111': '7',
'1000': '8',
'1001': '9',
'1010': 'a',
'1011': 'b',
'1100': 'c',
'1101': 'd',
'1110': 'e',
'1111': 'f',
}
string = no_leading_zeros(string)
try: return repl[string]
except KeyError: string = string[::-1]
res = ''
i = 0
while True:
try: string[i]
except IndexError: break
else:
k = no_leading_zeros(string[i:i+4][::-1])
res = repl[k] + res
i += 4
return no_leading_zeros(res)
for k in range(10000):
assert bin(k)[2:] == hex_to_bin(hex(k)[2:])
assert hex(k)[2:] == bin_to_hex(bin(k)[2:])