Python形态学n_ary_converter
Python Morphology n_ary_converter
除了二进制和十进制,我们可以有任何基数。我们使用的常见基数包括八进制、十六进制和 base64。
这里是一个 table 数字,从 0 到 15,除了 base64 之外,上面提到的每个基数。
http://www.themathwebsite.com/TogglerNumbers/Octal.GIF
问题: 编写一个函数 make_decimal_to_n_ary_converter 接受一个数字 n,其中 1 < n < 17,returns 一个数字转换器,它转换给定的十进制数转换为以 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 内置函数的情况下以编程方式编写它,以允许它从 [=30= 变为 运行 ] 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]
我认为您的台词 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]
除了二进制和十进制,我们可以有任何基数。我们使用的常见基数包括八进制、十六进制和 base64。
这里是一个 table 数字,从 0 到 15,除了 base64 之外,上面提到的每个基数。
http://www.themathwebsite.com/TogglerNumbers/Octal.GIF
问题: 编写一个函数 make_decimal_to_n_ary_converter 接受一个数字 n,其中 1 < n < 17,returns 一个数字转换器,它转换给定的十进制数转换为以 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 内置函数的情况下以编程方式编写它,以允许它从 [=30= 变为 运行 ] 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]
我认为您的台词 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]