您可以作弊:
tmap = str.maketrans('qwertyuiopasdfghjklzxc', 'abcdefghijklmnopqrstuv')
result = int(inputvalue.translate(tmap), 32)
演示:
>>> tmap = str.maketrans('qwertyuiopasdfghjklzxc', 'abcdefghijklmnopqrstuv')
>>> inputvalue = 'ya2'
>>> int(inputvalue.translate(tmap), 32)
16002
int()
函数可以将任意进制的数值转换为整数。你只需要使用标准的字母顺序即可。上面的str.translate()
调用将你自定义的进制映射到了标准进制。
否则,从左侧开始,取出输入字符串中的每个字符,将其映射为字符映射中的一个整数,并每次乘以基数N:
def decodeN(n, N, D={c: i for i, c in enumerate("0123456789qwertyuiopasdfghjklzxc")}):
result = 0
for c in n:
result = (result * N) + D[c]
return result
这是一种较慢的方法;
str.translate()
和
int()
都使用优化的 C 代码来完成它们的工作,因此将始终比纯 Python 方法更快。
将其转换为递归版本以匹配您的
encodeN()
实现:
def decodeN(n, N, D={c: i for i, c in enumerate("0123456789qwertyuiopasdfghjklzxc")}):
return decodeN(n[:-1], N) * N + D[n[-1]] if n else 0
int
,对吗?(Pythonint
不是以十进制存储的,所以“十进制”部分有点误导性。) - Mark Dickinsonbase64.b32encode()
有什么问题吗? - zwer