gpt4 book ai didi

python - 在Python中生成Vigenère Cypher表

转载 作者:行者123 更新时间:2023-11-30 22:25:57 24 4
gpt4 key购买 nike

我一直在努力用 python 创建 vigenere 表应该是这样的结果:

Vigenère Cypher Table

所以基本上我在第一行有整个字母表,而第二行的字母表移动了一个字母,等等。

这是我到目前为止的代码:

class CypherTable:

def __init__(self):
self.matrix = [[chr(i) for i in range(ord('a'),ord('z')+1)] for i in range(5)]

def __str__(self):
for i in range(len(self.matrix)):
print self.matrix[i]
return ""

table = CypherTable()
print(table)

我设法多次打印从 a 到 z 的字母,但我不知道如何修改每次交互以便将第一个字母移动一个。我习惯于在 java 中工作,首先定义数组长度,然后填充它,但由于 python 具有更快的语法,我无法弄清楚最好的方法是什么。

最佳答案

更简单的方法是使用string模块:

from string import ascii_uppercase as l

class CypherTable:
def __init__(self):
self.final_table = [l[i:]+l[:i] for i in range(len(l))]

for i in CypherTable().final_table:
print(i)

输出:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ
LMNOPQRSTUVWXYZABCDEFGHIJK
MNOPQRSTUVWXYZABCDEFGHIJKL
NOPQRSTUVWXYZABCDEFGHIJKLM
OPQRSTUVWXYZABCDEFGHIJKLMN
PQRSTUVWXYZABCDEFGHIJKLMNO
QRSTUVWXYZABCDEFGHIJKLMNOP
RSTUVWXYZABCDEFGHIJKLMNOPQ
STUVWXYZABCDEFGHIJKLMNOPQR
TUVWXYZABCDEFGHIJKLMNOPQRS
UVWXYZABCDEFGHIJKLMNOPQRST
VWXYZABCDEFGHIJKLMNOPQRSTU
WXYZABCDEFGHIJKLMNOPQRSTUV
XYZABCDEFGHIJKLMNOPQRSTUVW
YZABCDEFGHIJKLMNOPQRSTUVWX
ZABCDEFGHIJKLMNOPQRSTUVWXY

为了更简洁,特别是如果您不会在类中声明任何其他方法,您可以使用 @classmethod:

from string import ascii_uppercase as l
class CypherTable:
final_table = [l[i:]+l[:i] for i in range(len(l))]
@classmethod
def show_board(cls):
for i in cls.final_table:
print(i)

CypherTable.show_board()

关于您最近的评论,您可以尝试以下操作:

from string import ascii_uppercase as l
class CypherTable:
def __init__(self):
self.final_table = [l[i:]+l[:i] for i in range(len(l))]
def cross(self, b, a):
val1 = self.final_table[0].index(a)
new_letter = [i for i in self.final_table if i[0] == b][0][val1]
return new_letter

c = CypherTable()
print(c.cross('P', 'C'))

输出:

'R'

关于python - 在Python中生成Vigenère Cypher表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com