将已返回值的方法的值存储在 class 中
Storing the value of a method that has returned a value in a class
我总结一下只是在我的python程序上使用凯撒密码来加密和解密。但是,我似乎完全迷路了,因为我想 return self.cipher 这是加密的消息。我希望能够存储此值并使用它在我的其他方法 decryptCipher 中对其进行解密。我需要有关如何将值 I return 从 encryptCipher 方法传递给方法 decryptCipher 的建议。我也从 运行 得到一个错误,说 'str is not callable'。谢谢!
使用凯撒密码加密(classes)
class凯撒密码(对象):
def __init__(self, plainTxt, key, alphabet):
self.plainTxt = plainTxt
self.key = key
self.alphabet = alphabet
self.cipher = " "
self.decryptCipher = " "
def encryptCipher(self):
text = self.plainTxt.lower()
for lettersintext in text:
if lettersintext == " ":
self.cipher+=" "
else:
for i in range(len(self.alphabet)):
if self.alphabet[i] == lettersintext:
self.cipher += self.alphabet[i+self.key]
break
return self.cipher
def decryptCipher(self, encryptedVer):
#request if want to decrypt
text = encryptedVer.lower()
for lettersintext in text:
if lettersintext == " ":
self.decryptCipher+=" "
else:
for i in range(len(alphabet)):
if self.alphabet[i] == lettersintext:
self.decryptCipher += self.alphabet[i-self.key]
return self.decryptCipher
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z']
plainTxt = input("Enter a text to encrypt: ")
key = int(input("Key shift value: "))
init = CaesarCipher(plainTxt, key, alphabet)
print(init.encryptCipher())
encryptedVer = init.encryptCipher()
print(init.decryptCipher(encryptedVer))
另外我对语法布局表示歉意。当我复制代码时,它以这种方式结束,我是新手:)
您将加密消息存储在对象 (self.cipher) 中并返回它。如果你想要两者都没有问题,但你可能想在你开始填充它之前将你的 self.cipher 清空(否则你将在之前的加密之上附加一个全新的加密消息)。
或者,创建一个临时空字符串并在您的方法中附加到它上面。
关于str不可调用,是因为你在init中定义了一个属性self.decryptCipher = " ",同时定义了一个decryptCipher()方法。
您的方法调用实际上是在调用您的字符串并尝试将信息传递给它。
我总结一下只是在我的python程序上使用凯撒密码来加密和解密。但是,我似乎完全迷路了,因为我想 return self.cipher 这是加密的消息。我希望能够存储此值并使用它在我的其他方法 decryptCipher 中对其进行解密。我需要有关如何将值 I return 从 encryptCipher 方法传递给方法 decryptCipher 的建议。我也从 运行 得到一个错误,说 'str is not callable'。谢谢!
使用凯撒密码加密(classes)
class凯撒密码(对象):
def __init__(self, plainTxt, key, alphabet):
self.plainTxt = plainTxt
self.key = key
self.alphabet = alphabet
self.cipher = " "
self.decryptCipher = " "
def encryptCipher(self):
text = self.plainTxt.lower()
for lettersintext in text:
if lettersintext == " ":
self.cipher+=" "
else:
for i in range(len(self.alphabet)):
if self.alphabet[i] == lettersintext:
self.cipher += self.alphabet[i+self.key]
break
return self.cipher
def decryptCipher(self, encryptedVer):
#request if want to decrypt
text = encryptedVer.lower()
for lettersintext in text:
if lettersintext == " ":
self.decryptCipher+=" "
else:
for i in range(len(alphabet)):
if self.alphabet[i] == lettersintext:
self.decryptCipher += self.alphabet[i-self.key]
return self.decryptCipher
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z']
plainTxt = input("Enter a text to encrypt: ")
key = int(input("Key shift value: "))
init = CaesarCipher(plainTxt, key, alphabet)
print(init.encryptCipher())
encryptedVer = init.encryptCipher()
print(init.decryptCipher(encryptedVer))
另外我对语法布局表示歉意。当我复制代码时,它以这种方式结束,我是新手:)
您将加密消息存储在对象 (self.cipher) 中并返回它。如果你想要两者都没有问题,但你可能想在你开始填充它之前将你的 self.cipher 清空(否则你将在之前的加密之上附加一个全新的加密消息)。
或者,创建一个临时空字符串并在您的方法中附加到它上面。
关于str不可调用,是因为你在init中定义了一个属性self.decryptCipher = " ",同时定义了一个decryptCipher()方法。
您的方法调用实际上是在调用您的字符串并尝试将信息传递给它。