【问题标题】:Is there a built in function to change the base of an integer in Python? [duplicate]是否有内置函数可以更改 Python 中整数的基数? [复制]
【发布时间】:2018-11-27 22:17:30
【问题描述】:

Python 能够使用int() 函数将基数为 10 的整数转换为基数 X,其中 2

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

Python 3 中是否有一个内置函数来执行任意两个基之间的基更改?有哪些限制(如果有的话)与int() 的限制类似?

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

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

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

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

int('0b1100100', 2)

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

【问题讨论】:

  • 难道不是反过来,int从[2..36] 10中的任何基数转换?这也将回答您的部分问题。
  • int() 以您告诉它解释它的任何基数解释它的第一个参数。它不会“将基数为 10 的整数转换为基数 X”;它将基数 X 中的字符串转换为无基数整数,该整数恰好以基数 10 显示。老实说,我不明白您要对示例代码做什么。
  • @jwodder 示例代码是为了表明 int('100',9) 实际上不是“100 base 9”,而只是返回它的样子。我开始认为一个简单的否足以回答我的问题,但我会尝试编辑我的问题以澄清。另外,我不知道你所说的无基整数是什么意思。
  • 我同意@squeamishossifrage,这绝对看起来是重复的。我认为问题可能是 XisUnknown 不知道如何表达这个问题。
  • @squeamishossifrage 你说得对,我很难用语言表达这一点。归结为最后一次编辑,如何指定字符串中给出的第一个数字不是以 10 为底的数字?

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


【解决方案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

【讨论】:

  • gmpy2 现在推荐(而不是gmpy)。另请参阅重复的问题
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多