Python:将两组字符插入矩阵

Python: Insert two sets of chars into a matrix

使用 Playfair 密码。我有两组字符:一个关键字和其余字母表中没有关键字中的字符。示例(由于 Playfair 密码的性质,'i' 不考虑使用 25 个字符,非常适合 5x5 矩阵):

    keyword = 'keyword'
    alphabet = 'abcfghjlmnpqstuvxz'

我有一个空的 5x5 矩阵需要填写,首先使用键盘,然后使用其余的字母表。使用此关键字,矩阵应如下所示:

    [k, e, y, w, o]
    [r, d, a, b, c]
    [f, g, h, j, l]
    [m, n, p, q, s]
    [t, u, v, x, z]

这就是我尝试插入关键字字符的方式,但我被卡在了这里。完成此嵌套循环后,矩阵将填满 0:

    #uniquechars is the keyword
    uniqueLen = len(uniqueChars)
    keywordCounter = 0

    for i in range(0, 5):
        for j in range(0, 5):
            while keywordCounter < uniqueLen:
                #print('keywordCounter: ', keywordCounter)
                #print('uniqueLen: ', uniqueLen)
                #print(uniqueChars[keywordCounter])
                matrix[i][j] = uniqueChars[keywordCounter]
                keywordCounter = keywordCounter + 1
                #print(matrix[i][j])

而且我不知道如何将字母表的其余部分放入其中。

有什么想法吗?

您可以只连接字符串,然后按顺序迭代它。然后使用 floor 运算符 // 和模数运算符 % 将正确的索引放入矩阵中。

>>> keyword = 'keyword'
>>> alphabet = 'abcfghjlmnpqstuvxz'
>>>
>>> # Make an empty matrix -- could also use numpy chararray for this, but
>>> # this is good enough for this example. 
>>> matrix = [[None] * 5 for i in range(5)]
>>>  
>>> full_string = keyword + alphabet
>>> 
>>> for i in range(25):
...    matrix[i // 5][i % 5] = full_string[i]
>>>  
>>> for row in matrix:
...    print(row)
['k', 'e', 'y', 'w', 'o']
['r', 'd', 'a', 'b', 'c']
['f', 'g', 'h', 'j', 'l']
['m', 'n', 'p', 'q', 's']
['t', 'u', 'v', 'x', 'z']