Python - Substition Ciphers

时间:2017-09-20 18:31:01

标签: python encryption

我的目标是使用一个名为cipher的类,它有三种方法:构造函数,编码方法和解码方法。这是我到目前为止的代码的当前格式:

class Cipher:
    def __init__(self, codestring):
        self.codestring = codestring
        alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "
        for i in range(27):
            code = {a:b for (a,b) in zip(alphabet, self.codestring)}
            inverse = {a:b for (a,b) in zip(self.codestring, alphabet)}


    def encode(self, plaintext):
        self.plaintext = plaintext
        listofciphertext = [inverse[c] for c in self.plaintext]
        ciphertext = "".join(listofciphertext)
        return ciphertext


code1 = "BCDEFGHIJKLMNOPQRSTUVWXYZA-"
code2 = "CDEFGHIJKLMNOPQRSTUVWXYZAB-"

test1 = Cipher(code1)
test2 = Cipher(code2)

string1 = "HELLOWORLD"

#testSTR1 = (Cipher(encode(string1)))
print(test1.codestring)
print(test2.codestring)


#print(testSTR1.ciphertext)
#print(encode(code1, "IFMMPXPSME"))

当我尝试运行该程序时,它会调用一条错误,指出编码未在以下行中定义:

testSTR1 = (Cipher(encode(string1)))

方法之后的行只是我尝试调用方法的不同属性以查看它返回的内容。

我不确定如何正确调用encode方法以使其返回编码的字符串。我也不确定是否正确创建了编码。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用encode调用object.encode(codestring)(其中object是Cipher的实例)。这将返回编码文本,您可以使用

打印
print(testSTR1)

而不是

print(testSTR1.ciphertext)

同样来"编码"您可以使用code代替inverseinverse会对邮件进行解码。

答案 1 :(得分:0)

这是正确的:这里没有通用函数 encode 。你有一个按该名称的类方法,但你没有调用它。类方法的用法是instance.method(args)。例如,您可以使用

test1.encode(string1)

您还需要整理您的编码/解码操作,尤其是您将视为全局变量,而它当前是每个方法的本地(因此在编码中未定义)。

我建议您稍微退一步并使用增量编程:一次写几行,调试它们,并且在它们正常工作之前不要继续。目前,您在程序的不同部分有多处错误,因此很难知道您何时取得进展。