是否有内置函数来更改Python中整数的基数?

时间:2018-06-19 03:15:30

标签: python python-3.x math int logarithm

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,为第一个参数指定其他基数的前缀是什么

1 个答案:

答案 0 :(得分:1)

当谈到整数对象时,它与它的基数N表示形式不同。

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

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

如果您想将整数的基数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