【问题标题】:Python: Insert two sets of chars into a matrixPython:将两组字符插入矩阵
【发布时间】:2015-03-04 03:59:58
【问题描述】:

使用 Playfair 密码。我有两组字符:一个关键字和没有关键字中字符的字母表的其余部分。示例(由于 Playfair 密码的性质,使用 25 个字符时不考虑“i”,非常适合 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])

而且我不知道如何把其余的字母放在里面。

有什么想法吗?

【问题讨论】:

  • 什么是uniqueChars
  • 我的错。 uniqueChars 是关键字。

标签: python matrix fill chars


【解决方案1】:

您可以连接字符串,然后按顺序对其进行迭代。然后使用地板运算// 和模运算% 将正确的索引放入矩阵中。

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

【讨论】:

  • 让一切变得更简单,谢谢。但是,然后使用“for i in range(25): ... matrix[i // 5][i % 5] = full_string[i]”我得到这个错误:IndexError: list index out of range。有什么想法吗?
  • 您必须发布您的确切代码。我尝试发布完全可运行的示例,这个示例是一个完整的文档字符串(如果你愿意,你可以在 doctest 中对其进行测试)。所以你一定不能以同样的方式定义你的matrix变量。
  • 我的错误。工作得很好。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多