Python能够将基数为10的整数转换为基数X,其中2 <= X <= 36,具有int()
函数。看起来很自然(在你研究群论之前),有一种方法可以将数字转换回基数10,或者从基数X转换为基数Y以获得任何整数。
我可以使用from math import log
编写一个函数来在base之间进行转换,但我想知道是否有任何内置的内容已经内置到python中来完成此任务。
Python 3中是否有内置函数,可以在任意两个基础之间执行基础更改?哪些约束(如果有)与int()
的约束类似?
编辑:为了澄清,int()
只解释基数10中的第一个参数。我想将参数指定为不同的基本表示。我想知道是否有一个内置函数,它接受两个基本表示的参数。
示例(为什么int()
不是答案:
>>> int('100',9) == int(str(int('81',9)),10)
False
编辑#2:说我想知道基数为9的100,我会使用以下内容, int(&#39; 100&#39;,9) 这将返回值81。 现在说我想取81(在基数9中)并将其转回基数10.是否有一个内置于Python中的函数来完成此操作,或者是一种标记第一个参数的方法,以指示我在基数中给它一个数字9?
我知道有一种方法可以使用'ob'
为二进制文件指定此项,使用'0x'
为十六进制值指定。例如,
int('0b1100100', 2)
返回值100,为第一个参数指定其他基数的前缀是什么。
答案 0 :(得分:1)
当谈到整数对象时,它与它的基数N表示形式不同。
在内部,整数存储在二进制文件中,而整数对象本身没有基数。您可以从任何以N为底的数字字符串构造一个int对象,只要您指定一个底数并且该数字字符串对该底数有效。通常最多限制为36个,因为字母表中有10个十进制数字和26个字母。
对于基数2、8、10和16,有一些特殊情况,因为它们使用最多。对于这些基数,可以在字符串表示形式本身中指定基数。您分别为2、8和16使用0b
,0
或0x
的前缀。十进制是默认值,也是最常用的,因此不需要前缀。
如果您想将整数的基数N表示形式返回为字符串,即反转int(n,N)操作,则有几种选择。您可以使用gmpy.digits(n, N)
,其中n
是您的int,N
是您想要的基础。这可能是多余的,因为它需要安装gmpy。
您也可以使用类似这样的内容:
import string
def int_to_base(n, N):
""" Return base N representation for int n. """
base_n_digits = digits + ascii_lowercase + ascii_uppercase
result = ""
if n < 0:
sign = "-"
n = -n
else:
sign = ""
while n > 0:
q, r = divmod(n, N)
result += base_n_digits[r]
n = q
if result == "":
result = "0"
return sign + "".join(reversed(result))
使用该函数或类似的函数,您可以返回以N为底的整数n的字符串N表示形式,以便:
>>> base_n_string = "81"
>>> base = 9
>>> int_to_base(int("81", 9), 9) == "81"
True