【问题标题】:Python Morphology n_ary_converterPython 形态学 n_ary_converter
【发布时间】:2019-07-07 03:20:27
【问题描述】:

除了二进制和十进制之外,我们还可以有任何基数的数字。我们使用的常见基数包括八进制、十六进制和 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]

【问题讨论】:

    标签: python algorithm binary hex octal


    【解决方案1】:

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

    首先我们必须定义数字集。由于我们知道基数将小于 17,因此我采用了 17 位数集(digit_list)。对于给定的基数 k,digit_list[k] 将是我们可用的数字。其余功能相同。我们将 basek_num 附加到 corr。 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]
    

    【讨论】:

    • 谢谢,看来是对的,我得花点时间先看看:)
    • 哦,太好了,我明白你的意思。但是你是如何当场思考这些事情的呢?我总觉得自己不够“聪明”,无法自己想出这些解决方案。附:我认为不需要'digit_list_k'对吗?
    • 有些问题你可能觉得容易,我可能觉得困难,相信我。 ;) PS:你是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2012-02-17
    • 2018-03-19
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多