我正在尝试实现一个算法,它可以将一个字库长的非负整数转换成给定字母表a和长度k的字符串,并按bigendian字节顺序:
在哪里
我的代码:
def ToString(x, k, A):
S = []
N = len(A) # N = |A|
for i in reversed(range(0,k)):
s_k = InverseRank(x % N,A,N,k,i)
x = x // N
S.insert(0,s_k)
return S
def InverseRank(x,A,N,k,i):
return A[(x//N**(k-i-1)) % N]
但是,它工作不正常。你知道吗
A = ['A', 'B', 'C', 'D', 'E'] # Alphabet
k = 3
x = 123
S = ToString(x,k,A)
结果:
s => ['A', 'A', 'E']
不管我选择什么x,结果字符串只在最后一个字符中不同。前两个总是“A”
您误解了“where”的解释。
表达式
函数的算法应该生成什么,而不是列
s_k = InverseRank(x % N,A,N,k,i)
中要使用的秩函数本身。你知道吗一种解决方案是将
s_k = InverseRank(x % N,A,N,k,i)
更改为s_k = A[x % N]
。你知道吗相关问题 更多 >
编程相关推荐