Python:将两组字符插入矩阵中

时间:2015-03-04 03:59:58

标签: python matrix fill chars

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

    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])

而且我不知道如何在那里获得剩下的字母。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以只连接字符串,然后按顺序迭代它。然后使用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']