将已返回值的方法的值存储在类中

问题描述

我要总结一下,仅在我的python程序上使用Caesar密码进行加密和解密。但是,我似乎完全迷路了,因为我想返回已加密的消息self.cipher 。我希望能够存储此值,并使用其他方法 decryptCipher 对其进行解密。我需要有关如何将我从 encryptCipher 方法返回的值传递给方法 decryptCipher 的建议。运行此命令时,我也收到一条错误消息,提示'不可调用'。谢谢!

使用凯撒密码(类)进行加密

CaesarCipher类(对象):

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,alphabet)

print(init.encryptCipher())

encryptedVer = init.encryptCipher()

print(init.decryptCipher(encryptedVer))

我也对语法布局表示歉意。当我复制代码时,它以这种方式结束,这是我的新手:)

解决方法

您正在将加密的消息存储在对象(self.cipher)中并返回它。如果您同时希望两者都没有问题,但是您可能希望在开始填充self.cipher之前将其清空(否则,您将在之前的加密之上附加一个全新的加密消息)。

或者,将一个临时空字符串添加到您的方法中。

就不可调用str而言,这是因为您在 init 中定义了一个属性self.decryptCipher =“”以及定义了一个方法cryptoCipher()。

您的方法调用实际上是在调用您的字符串并尝试将信息传递给它。