首页  >  文章  >  后端开发  >  Python 中是否有内置函数可以更改整数的基数?

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

WBOY
WBOY转载
2024-02-05 21:18:07384浏览

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 进制是多少,我会使用以下内容, int('100', 9) 这将返回值 81。 现在假设我想取 81(以 9 为基数)并将其转换回以 10 为基数。python 中是否有内置函数来完成此操作,或者有一种方法来标记第一个参数以表明我正在给它一个以基数表示的数字9?

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

int('0b1100100', 2)

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


正确答案


当您谈到整数对象时,它与其基数 n 表示形式不同。

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

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

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

以上是Python 中是否有内置函数可以更改整数的基数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除