Python: преобразование базы 10 в базу 36

Я пытаюсь преобразовать десятичное число в основание 36 (... 8,9, a, b, c ... x, y, z, 10,11 ...), но когда я запускаю свой код, я получаю кучу с плавающей точкой вместо целых чисел.

def trc(n):
    if (n < 0): print(0, end='')
    elif (n<=1): print(n, end='')
    else:
        trc( n / 36 )
        x =(n%36)
        if (x < 10): print(x, end='')
        else: print(chr(x+87), end='')

Я основал этот код на this.


person diligar    schedule 15.10.2015    source источник
comment
stackoverflow.com/questions/1181919/python-base-36-encoding этот   -  person Rajarshi Das    schedule 15.10.2015
comment
Требуется целочисленное деление в Python3, trc(n // 36)   -  person AChampion    schedule 15.10.2015


Ответы (2)


В Python 3 оператор / выполняет деление с плавающей запятой, даже если оба аргумента являются целыми числами. Это отличие от Python 2, где деление двух целых чисел отбрасывает дробную часть.

Вы можете явно запросить целочисленное деление с помощью оператора //. Результат будет округлен до отрицательной бесконечности. Или, поскольку вы также рассчитываете модуль, вы можете использовать divmod, чтобы получить их оба одновременно:

else:
    n, x = divmod(n, 36)
    trc(n)
    if x < 10: # ...
person Blckknght    schedule 15.10.2015
comment
Я заметил, что в последнее время многие домашние задания относятся к Python 3. - person Mark Ransom; 15.10.2015

Вы могли просто сделать это:

def trc(n):
    return(int(str(n), base = 36))

Затем print(trc(x)), чтобы получить x в базе 36. Это решение работает для любой базы.

Однако он не дает вам букв с основанием 36: вместо z он возвращает 36.

Для этого вам нужно будет создать отдельную программу.

В большинстве случаев этого должно быть достаточно, если вы не работаете с чем-то вроде excel, которому нужны буквы.

person Leo    schedule 05.01.2021
comment
Это неверное направление от того, что задает вопрос. - person Maximilian Burszley; 30.03.2021