在 Python3 中使用 for 循环为 vigenere 密码创建二维列表

Creating 2D List using for loop in Python3 for vigenere cipher

所以,我正在尝试制作一个可以在 python 3 中加密和解密 vigenere 密码的程序。我这样做是为了练习,但我真的很难创建密码矩阵。如果你不熟悉 vigenere 密码, here's a helpful photo of what I want.

我必须将第一项切换到最后一项的功能是 shift,它运行良好。我只需要创建列表,其中字母表的每个值都被转移了。我的代码如下。

import string

alpha = list(string.ascii_lowercase)


def shift(inList):  #Shifts the first item in the list to the end
    first = inList[0]
    inList.pop(0)
    inList.append(first)
    return inList

lastList = alpha
cipher = alpha
for item in alpha:
    print(alpha.index(item))
    cipher = cipher[].append([shift(lastList)])
    #global lastList = cipher[-1]
    print(lastList)
    print(cipher)

我的问题是创建保存 vigenere 密码的二维数组。我似乎无法让它发挥作用。上面是我做的最远的,这个解决方案不会编译。

如果您只想创建 table,您可以像这样一次性完成:

for i in range(26):
     left = string.ascii_uppercase[i:]
     right = string.ascii_uppercase[:i]
     print('{}{}'.format(left, right))   

我正在努力自己构建一个,所以这就是我创建 table:

count = 0
ext_alph = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
alph_table = []
for y in range(26):
    new_row = []
    for x in range(26):
        new_row.append(ext_alph[x+count])
    count += 1
    alph_table.append(new_row)
for r in alph_table:
    print(r)

我发现你可以将你放入每个新行的内容转移。因为我不想直接从字母表字符串的末尾移动到开头以继续创建后面的行(例如以 x、y、z、a、b... 开头),所以我只是添加了另一个字母表到最后。最后两行只是为了显示 table,顺便说一句。