很抱歉,如果我提出一个重复的问题,但对此一无所知。如果可以以不同的方式提出问题,请随时提出建议或编辑。
目标是将任何基于N的整数转换为十进制整数。
from string import digits, ascii_uppercase
def convert_n_to_10(number, n):
alphabet = digits + ascii_uppercase
result_10 = 0
for i in range(len(str(number))):
result_10 = result_10 * n + alphabet.index(str(number)[i])
return result_10
问题是从这个循环中制作单线的可能性不断增加。
for i in range(len(str(number))):
result_10 = result_10 * n + alphabet.index(str(number)[i])
谢谢。
转向您的
是直接的 result_10 = 0
for i in range(len(str(number))):
result_10 = result_10 * n + alphabet.index(str(number)[i])
return result_10
进入这个:
return reduce(lambda result_10, i: result_10 * n + alphabet.index(str(number)[i]),
range(len(str(number))),
0)
请注意,我简单地复制了主要部分(计算表达式,迭代和初始值),甚至没有阅读它们。
(在Python 3中,您需要从functools
模块导入reduce
。)
return sum([pow(n, len(x)-i) * alphabet.index(x[i])
for i in range(len(x))])
计算数字中每个位置的 n 的适当功率(已作为字符串;无需转换),并乘以数字值。
更好,正如约瑟夫斯(Josephible)提醒我们的那样:
return int(x, n)