Python:用关键字和字母表的其余部分填充5x5字符矩阵

2024-10-05 13:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

编程Playfair密码以防有人听说。在

我要求用户输入一个关键字(例如:记账),然后删除重复的字母(例如:bokeping)。我需要创建一个5x5矩阵,用字符填充它,但是声明

    matrix = [][]

标记为“无效语法”。然后我需要用唯一字符填充矩阵,然后字母表的其余字母(去掉唯一的关键字字符后)以(I和j放在同一位置)结束:

^{pr2}$

问题1:如何正确声明矩阵来使用它?在

问题2:如何用关键字和其余字符填充矩阵?在

除此之外,还有什么建议吗?在

谢谢你的帮助。在


Tags: 用户标记声明密码编程字母语法矩阵
3条回答

Python有groupby

>>> from itertools import groupby
>>> s = 'aabbccc'
>>> [k for k, g in groupby(s)]
['a', 'b', 'c']

Question 1: How do I properly declare the matrix to use it for this?

矩阵是列表的列表。您可以这样声明:m = [[x,y] for x in range(3) for y in range(3)]

可以使用嵌套列表结构创建矩阵。在

例如,下面的代码定义了一个3x3矩阵。在

M = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

M[1]  # Row 2

[4, 5, 6]

M[1][2]  # Row 2, item 3

6

您可以使用列表理解来处理结构。在

^{pr2}$

如果你像我一样偏执于图书馆,那么这就是你的解决办法。在

def raw_inp(msg):
    #This function makes sure the raw_input function is available in
    #both python 2.x or 3.x
    try:
        return raw_input(msg)
    except NameError:
        return input(msg)

def unique_array(arr):
    #This function removes duplicates of array values
    check = []
    for i in arr:
        if i not in check:
            check.append(i)
    return check

def form(key):
    key = key.lower() #make sure key is all lowercase
    alpha = []
    key_arr = [] #Convert key to array
    key_arr.extend(key)#Convert key to array
    key = key_arr #Convert key to array
    alpha.extend("abcdefghijklmnopqrstuvwxyz") #Convert alphabet to array
    arr = (key+alpha)
    new_arr = []
    finish_arr = []
    return_arr = []
    arr = unique_array(arr) #Removes any duplicate letters before we start
    for i in arr:
        if i in alpha: #if the character is in the alphabet
            if i == "i" or i == "j": #if it is i or j, place it together
                new_arr.append("ij")
            else:
                new_arr.append(i) #or else place the letter in the array
    x = 0 #array index
    i = 0
    new_arr = unique_array(new_arr)
    while x < 5:
        finish_arr.append([])
        finish_arr[x] = []
        y = 0
        while y < 5:
            finish_arr[x].append(new_arr[i])
            y += 1
            i += 1
        x += 1
    for i in finish_arr:
        return_arr.append(unique_array(i))
    return return_arr


key = raw_inp("Key: ") #get key

arr = (form(key)) #

for i in arr:
    print i

很抱歉这种奇怪的风格。我用另一种方式编程,然后换成了这种方式。在

这段代码是为了让人理解,而不是简短或高效的。如果你不明白,请评论

相关问题 更多 >

    热门问题