Python形态学n_ary_converter

问题描述 投票:1回答:1

除了二进制和十进制之外,我们可以有任何基数。我们使用的常见基础包括八进制,十六进制和base64。

这是除了base64之外的上述每个基数中0到15的数字表。

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

问题:写一个函数make_decimal_to_n_ary_converter接受一个数字n,其中1 <n <17,并返回一个数字转换器,它将给定的十进制数转换为基数n。

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]
python algorithm binary hex octal
1个回答
0
投票

在我看来,你的线binary += '0' if n % 2 == 0 else '1'并不是真的有必要。 binary += n % 2就足够了。

首先,我们必须定义数字集。由于我们知道基数小于17,所以我采用了17位数字(digit_list)。对于给定的基数k,digit_list [k]将是我们可用的数字。功能的其余部分是相同的。我们用corr附加basek_num。 n%k的digit_list中的值。直到我们的数字为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]
© www.soinside.com 2019 - 2024. All rights reserved.