在python中结合两个方法

时间:2016-03-27 14:55:33

标签: python python-2.7

我有一个有2种方法的课。 我想用两种方法打印出一些文本

class ceasar:
    plain = ""
    cipher = ""
    shift = 0

    def encrypt (self, plain):
        newStr = ""
        excludedLetters = ['a','e','i','o','u',' '] # best varible name ever
        for letter in plain:
            if not(letter in excludedLetters): # exclude the letters in excludedLetters
                newStr = newStr + letter # addes letters one by one into newStr
        return newStr

    def encryptTwo(self, plain, shift):
        cipherStr = ""    
        for letter in plain:
            cipher = ord(letter) + shift
            cipherStr = cipherStr + chr(cipher)
        return cipherStr

c = ceasar() # use ceasar class as c

如果我尝试将其打印为

print c.encrypt(c.plain)

它将删除元音和空格。

print c.encryptTwo(c.plain, c.shift)

将改变它(在用户输入上)

但如果有人想要删除元音并转移它,如何组合它们? 我可以输入我试图让它工作的方式,但它会使可疑错误的帖子混乱

2 个答案:

答案 0 :(得分:0)

我认为你想要的是

print c.encryptTwo(c.encrypt(c.plain), c.shift)

将执行encryptTwo,结果为encrypt

但是,如果您想从结果中删除元音,那么

print c.encrypt(c.encryptTwo(c.plain, c.shift))

是你想要的。

答案 1 :(得分:0)

我会在init中使用plain和shift作为参数,你也可以使用 str.translate 删除元音和空格,你也可以忘记密码,因为你从不使用它,也是普通的设置我不知道self.plain如何给你任何结果

second_sum

它将删除元音和空格然后移动剩余部分,但我不知道你将如何将字符串重新组合在一起,如果你只是在加密中使用了逻辑,那么你可以转回去,但我不会&#39 ;如果您计划解密,请查看删除字母的逻辑:

class ceasar(object):
    def __init__(self, plain,  shift):
        self.plain = plain
        self.shift = shift

    def remove(self):
        return self.plain.translate(None, "aeiou ")

    def encrypt(self, new):
        return "".join([chr(ord(letter) + self.shift) for letter in new])

如果您想使用单个方法并为用户提供删除内容的选项,请在加密中设置标记:

In [2]: c = ceasar("foobar", 3) 

In [3]: c.encryptTwo(c.encrypt())
Out[3]: 'ieu'

In [4]: c = ceasar("foobar", 3)

In [5]: c.encrypt(c.remove())
Out[5]: 'ieu'

In [6]: c.plain
Out[6]: 'foobar'

In [7]: c.encrypt(c.plain)
Out[7]: 'irredu'
In [11]: c = ceasar("abc", 3)

In [12]: c.encrypt(c.remove())
Out[12]: 'ef'

传递True会删除忽略的内容,或者使用每个char:

class ceasar(object):
    def __init__(self, plain,  shift, ignore):
        self.plain = plain
        self.shift = shift
        self.ignore = set(ignore)

    def encrypt(self,remove=False):
        if remove:
            return "".join([chr(ord(letter) + self.shift) for letter in self.plain if letter not in self.ignore])
        return "".join([chr(ord(letter) + self.shift) for letter in self.plain])

您也可以将它与 str.translate

结合使用
In [18]: c = ceasar("abc", 3,"aeiou ")

In [19]: c.encrypt(True)
Out[19]: 'def'

In [20]: c.encrypt()
Out[20]: 'ef'

In [21]: c.plain
Out[21]: 'abc'