丢信,碱基转换
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
值,这对您的解码循环条件有什么影响?
我相信这足以让您找到您的错误。但是,下次尝试使用调试器并单步执行代码;您将能够看到问题出在哪里。
我正在尝试通过从基数 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
值,这对您的解码循环条件有什么影响?
我相信这足以让您找到您的错误。但是,下次尝试使用调试器并单步执行代码;您将能够看到问题出在哪里。