我的目标是使用一个名为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方法以使其返回编码的字符串。我也不确定是否正确创建了编码。任何建议将不胜感激。
答案 0 :(得分:0)
您可以使用encode
调用object.encode(codestring)
(其中object是Cipher
的实例)。这将返回编码文本,您可以使用
print(testSTR1)
而不是
print(testSTR1.ciphertext)
同样来"编码"您可以使用code
代替inverse
。 inverse
会对邮件进行解码。
答案 1 :(得分:0)
这是正确的:这里没有通用函数 encode 。你做有一个按该名称的类方法,但你没有调用它。类方法的用法是instance.method(args)
。例如,您可以使用
test1.encode(string1)
您还需要整理您的编码/解码操作,尤其是您将逆视为全局变量,而它当前是每个方法的本地(因此在编码中未定义)。
我建议您稍微退一步并使用增量编程:一次写几行,调试它们,并且在它们正常工作之前不要继续。目前,您在程序的不同部分有多处错误,因此很难知道您何时取得进展。