Python 能够将以 10 为基数的整数转换为以 X 为基数的整数,其中 2<=X<=36,使用 int()
功能。对于任何整数来说,有一种方法可以将数字转换回基数 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 有一些特殊情况,因为它们是最常用的。对于这些基数,您可以在字符串表示形式本身中指定基数。您可以分别使用 0b
、0o
或 0x
前缀来表示 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 - Python 中是否有内置函数可以更改整数的基数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50920126/