Форум сайта python.su
Здравствуйте!
Написал функцию конвертации десятичного числа в шестнадцатеричное,
всё работало до конкретно этого числа - “123456”
Функция math_16 возвращает:
return ''.join(map(str, num_16_final)) print(math_16(123456)) 1e+240
return ' '.join(map(str, num_16_final)) print(math_16(123456)) 1 E 2 4 0
Отредактировано Marc (Июль 16, 2019 11:47:13)
Офлайн
MarcА что такое num_16_final это догадаться надо?
Подскажите, пожалуйста
Офлайн
FishHook
def math_16(a): DATABASE = { 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' } num_16 = [] while a >= 15: b = int(a) / 16 c = int(b) * 16 d = a - int(c) num_16 += [d] a = int(b) num_16 += [a] num_rev = [] for i in reversed(num_16): num_rev +=[i] num_16_final = [] for i in num_rev: if i == i: num_16_final += [DATABASE[i]] return ''.join(map(str, num_16_final)) print(math_16(123456))
Офлайн
Не понял, лыжи не едут видимо.
asm:/mnt/e$ python2.7 /mnt/d/test/test.py
1E240
asm:/mnt/e$ python3 /mnt/d/test/test.py
1E240
asm:/mnt/e$
Отредактировано FishHook (Июль 16, 2019 13:06:10)
Офлайн
FishHookПонял, проблема в онлайн IDE.
нету никаких лишних знаков
Офлайн
import string def itoa( i, base=10, digits=string.digits + string.ascii_uppercase ): if base < 2 or base > len(digits): raise ValueError(f'base must be in range [2 .. {len(digits)}]') digits_idx = [] while i: i, l = divmod(i, base) digits_idx.append(l) return ''.join(digits[i] for i in reversed(digits_idx)) def math_16(i): return itoa(i, 16)
>>> math_16(16) '10' >>> math_16(100500) '18894' >>> int('18894', 16) 100500
Отредактировано Slow (Июль 16, 2019 13:26:12)
Офлайн