Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2019 10:55:23

Marc
Зарегистрирован: 2019-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

Здравствуйте!

Написал функцию конвертации десятичного числа в шестнадцатеричное,
всё работало до конкретно этого числа - “123456”

Функция math_16 возвращает:

 return ''.join(map(str, num_16_final))   
 
print(math_16(123456))
1e+240

Если добавить пробел в “join”:
 return ' '.join(map(str, num_16_final))
print(math_16(123456))
1 E 2 4 0

Подскажите, пожалуйста, почему в первом варианте появляется “e+”?

Отредактировано Marc (Июль 16, 2019 11:47:13)

Офлайн

#2 Июль 16, 2019 12:15:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

Marc
Подскажите, пожалуйста
А что такое num_16_final это догадаться надо?
Покажите весь код.



Офлайн

#3 Июль 16, 2019 12:44:37

Marc
Зарегистрирован: 2019-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

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))

Офлайн

#4 Июль 16, 2019 13:05:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

Не понял, лыжи не едут видимо.

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)

Офлайн

#5 Июль 16, 2019 13:09:49

Marc
Зарегистрирован: 2019-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

FishHook
нету никаких лишних знаков
Понял, проблема в онлайн IDE.
Спасибо.

Офлайн

#6 Июль 16, 2019 13:21:45

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Функция возвращает значение в разном формате

 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version