丢信,碱基转换

Lost letter, base conversion

我正在尝试通过从基数 39 转换为基数 10 并返回来在 Python 中进行自定义基数转换。它工作正常,只是我丢失了字符串的最后一个字母:

#base 39(custom characters)
chars = 'esiarntolcdugpmhbyfvkwzxjq 0.,123456789'
nchars = len(chars)

#text that is converted (I am not bob btw)
text = 'hello everyone, bob here'

#convert to decimal 
final = 0
for i, v in enumerate(text):
    print(v)
    final += nchars**i * chars.index(v)

text1 = ''
ind = 0
#convert back to custom base
while final >= 1:
    print(final)
    text1 += chars[final % nchars]
    final = final // nchars

print(text1)
# prints hello everyone, bob her

我做错了什么?

您不会系统地丢失 text 的最后一个字母,实际上只有当它以字母“e”结尾时才会发生这种情况。那这封信有什么特别之处呢?好吧,它开始(或者,我应该说,它在您的编码字典 chars 的索引 0 处)。因此,'e' 的编码值是多少?这代表什么 final 值,这对您的解码循环条件有什么影响?

我相信这足以让您找到您的错误。但是,下次尝试使用调试器并单步执行代码;您将能够看到问题出在哪里。