使用Python3循环创建维吉尼亚密码所需的二维列表
解决维吉尼亚密码矩阵创建的问题
嘿,我明白你卡在维吉尼亚密码矩阵创建这一步的苦恼了!既然你已经有了能正常运行的shift函数,那生成这个二维列表其实比你想的简单~
核心思路
维吉尼亚密码矩阵的本质就是26行字母表,每一行都是上一行循环左移一位的结果。第一行是原始字母表(A-Z),第二行是B-Z+A,第三行是C-Z+A+B,以此类推。基于你已有的shift函数,我们只需要从原始字母表开始,反复调用shift生成每一行,然后把所有行收集到一个二维列表里就行。
代码实现(适配你的shift函数)
假设你的shift函数是接收一个字母列表,将首元素移到末尾并返回新列表(比如shift(['A','B',...,'Z'])返回['B',...,'Z','A']),那可以这样写:
import string # 这里是你已经实现好的shift函数(示例,可替换成你自己的) def shift(alphabet_list): return alphabet_list[1:] + [alphabet_list[0]] # 1. 生成原始字母表(大写,按需换成string.ascii_lowercase用小写) original_alphabet = list(string.ascii_uppercase) # 2. 初始化维吉尼亚矩阵 vigenere_matrix = [] # 3. 添加第一行(原始字母表) current_row = original_alphabet.copy() vigenere_matrix.append(current_row) # 4. 生成剩下的25行 for _ in range(25): current_row = shift(current_row) vigenere_matrix.append(current_row) # 可选:打印矩阵验证效果 for row in vigenere_matrix: print(''.join(row))
如果你的shift函数处理的是字符串
要是你的shift函数是直接操作字符串(比如shift("ABC...Z")返回"BC...ZA"),那代码可以更简洁:
import string def shift(alphabet_str): return alphabet_str[1:] + alphabet_str[0] original_alphabet = string.ascii_uppercase vigenere_matrix = [original_alphabet] current_row = original_alphabet for _ in range(25): current_row = shift(current_row) vigenere_matrix.append(current_row) # 验证打印 for row in vigenere_matrix: print(row)
这样生成的矩阵完全符合维吉尼亚密码的要求,后续加密解密时,就可以通过明文和密钥的字母索引,在矩阵中快速定位对应的字符啦~
内容的提问来源于stack exchange,提问作者GarrukApex
相关产品推荐
相关产品推荐

