Морфология Python n_ary_converter - PullRequest
0 голосов
/ 13 февраля 2019

Кроме двоичных и десятичных чисел, мы можем иметь числа любой базы.Общие базы, с которыми мы работаем, включают восьмеричные, шестнадцатеричные и base64.

Вот таблица чисел от 0 до 15 в каждой из вышеупомянутых основ, кроме base64.

http://www.themathwebsite.com/TogglerNumbers/Octal.GIF

ВОПРОС: Напишите функцию make_decimal_to_n_ary_converter, которая принимает число n, где 1

def make_decimal_to_n_ary_converter(n):
    # return a number converter that takes a decimal number 
    # and returns its string representation in base n
    def converter(x):
        if n == 2:
            return bin(x)[2:]
        elif n == 8:
            return oct(x)[2:]
        elif n == 16:
            return hex(x)[2:].upper()
    return converter

По сути, этот код работает только для двоичного, восьмеричного и шестнадцатеричного кодов, но мне нужно написать его программно без встроенной функции python, чтобы он мог запускаться из n_ary 1-17

Вот примеро том, как двоичное преобразование написано программно:

def decimal_to_binary(n):
    # return bin(n)[2:]
    if n == 0:
        return '0'
    binary = ''
    while n > 0:
        binary += '0' if n % 2 == 0 else '1'
        n = n//2
    return binary[::-1]

1 Ответ

0 голосов
/ 13 февраля 2019

Ваша линия binary += '0' if n % 2 == 0 else '1' на самом деле не нужна, по моему мнению.binary += n % 2 будет достаточно.

Сначала мы должны определить набор цифр.Поскольку мы знаем, что база будет меньше 17, я взял набор из 17 цифр (digit_list).Для данной базы k, digit_list [k] будет нашими доступными цифрами.В остальном функция такая же.мы добавляем basek_num с корр.значение в digit_list n%k.пока наше число не станет 0.

def decimal_to_basek(n, k):
    # return bin(n)[2:]
    digit_list = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g',]
    if n == 0:
        return '0'
    basek_num = ''
    while n > 0:
        basek_num +=  digit_list[n % k]
        n = n//k
    return basek_num[::-1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...