解码单词时输出不正确

问题描述

下面的代码中的考虑words是此处提到的单词listhttps://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/Contemporary_poetry

N = len(words)

def encode(message):
    out = []
    for i in range(len(message) / 8):
        word = message[8 * i:8 * i + 8]
        x = int(word,16)
        w1 = (x % N)
        w2 = ((x / N) + w1) % N
        w3 = ((x / N / N) + w2) % N
        out += [ words[w1],words[w2],words[w3] ]
    return out

def decode(wlist):
    out = ''
    for i in range(len(wlist) / 3):
        word1,word2,word3 = wlist[3 * i:3 * i + 3]
        w1 = words.index(word1)
        w2 = (words.index(word2)) % N
        w3 = (words.index(word3)) % N
        x = w1 + N * ((w2 - w1) % N) + N * N * ((w3 - w2) % N)
        out += '%08x' % x
    return out


if __name__ == '__main__':
    import sys
    if len(sys.argv) == 1:
        print 'Error: No Arguments'
    elif len(sys.argv) == 2:
        print ' '.join(encode(sys.argv[1]))
    else:
        print decode(sys.argv[1:])

运行此代码时,encode()可以正常工作,但是我遇到decode()的问题:

1234567890编码为单词

python abovecode.py 1234567890
memory string board

文字解码:memory string board

python abovecode.py memory string board
12345678

为什么最后一个输出中缺少90?与校验和有关吗?如何解决此问题以及在decode()中需要更改什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)