是否有内置函数可以更改 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 使用 0b
、0o
或 0x
前缀。十进制是默认值,也是最常用的,因此不需要前缀。
如果您想 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
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 使用 0b
、0o
或 0x
前缀。十进制是默认值,也是最常用的,因此不需要前缀。
如果您想 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