是否有内置函数可以更改 Python 中整数的底数?

Is there a built in function to change the base of an integer in Python?

Python 可以使用 int() 函数将基数为 10 的整数转换为基数 X,其中 2<=X<=36。有一种方法可以将数字转换回以 10 为基数,或者对于任何整数,从以 X 为基数转换为以 Y 为基数,这似乎很自然(除非你研究过群论)。

我可以使用 from math import log 编写一个函数在基数之间进行转换,但我想知道 python 是否已经内置了任何东西来完成这个。

Python 3 中是否有内置函数,可以在任意两个碱基之间进行碱基转换?与 int()?

类似的约束有哪些(如果有)

编辑: 澄清一下,int() 仅解释以 10 为基数的第一个参数。我想将参数指定为不同的基数表示形式。我想知道是否有一个内置函数接受两个基本表示参数。 示例(为什么 int() 不是答案:

>>> int('100',9) == int(str(int('81',9)),10)
False

编辑 #2: 假设我想知道 100 以 9 为底数是多少,我会使用以下内容, 整数('100',9) 这将 return 值为 81。 现在说我想取 81(以 9 为基数)并将其转回以 10 为基数。Python 中是否有内置函数来完成此操作,或者标记第一个参数以表明我正在给它的方法以 9 为基数的数字?

我知道有一种方法可以使用 'ob' 为二进制指定此值,使用 '0x' 指定十六进制值。例如,

int('0b1100100', 2)

这个return值为100,为第一个参数指定其他基数的前缀是什么

当你说到整数对象时,它与它的基数 N 表示不同。

虽然在内部,整数是以二进制存储的,但整数对象本身没有基数。您可以从任何基数 N 的任何数字串构造一个 int 对象,只要您指定基数并且数字串对该基数有效。这通常限制为最多 36 个,因为字母表中有 10 个十进制数字和 26 个字母。

基数 2、8、10 和 16 有特殊情况,因为它们最常用。对于这些基数,您可以在字符串表示本身中指定基数。您分别为 2、8 和 16 使用 0b0o0x 前缀。十进制是默认值,也是最常用的,因此不需要前缀。

如果您想 return 将整数的基数 N 表示形式转换为字符串,即反转运算 int(n, N),您有多种选择。您可以使用 gmpy.digits(n, N),其中 n 是您的整数,而 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))

使用该函数或类似函数,您可以 return 以 N 为基数的整数 n 的字符串基数 N 表示形式,因此:

>>> base_n_string = "81"
>>> base = 9
>>> int_to_base(int("81", 9), 9) == "81"
True