将字符串添加到字符串

时间:2011-06-10 06:07:06

标签: python string add

我在将字符串添加到另一个字符串时遇到问题。我是Python的新手。

字符串无法记住我添加的先前值。

任何可以帮助我的人?以下是Python中的代码片段。

我的问题出在encrypt()的while循环中。

感谢先生。

class Cipher:


    def __init__(self):
        self.alphabet = "abcdefghijklmnopqrstuvwxyz1234567890 "
        self.mixedalpha = ""
        self.finmix = ""

    def encrypt(self, plaintext, pw):
        keyLength = len(pw)
        alphabetLength = len(self.alphabet)
        ciphertext = ""

        if len(self.mixedalpha) != len(self.alphabet):
            #print 'in while loop'

            x = 0
            **while x < len(self.alphabet):
                mixed = self.mixedalpha.__add__(pw)
                if mixed.__contains__(self.alphabet[x]):
                    print 'already in mixedalpha'
                else:
                    add = mixed.__add__(str(self.alphabet[x]))
                    lastIndex = len(add)-1
                    fin = add[lastIndex]
                    print 'fin: ', fin
                    self.finmix.__add__(fin)
                    print 'self.finmix: ', self.finmix
                x+=1**


        print 'self.finmix: ', self.finmix
        print 'self.mixedalpha: ', self.mixedalpha
        for pi in range(len(plaintext)):
            #looks for the letter of plaintext that matches the alphabet, ex: n is 13
            a  = self.alphabet.index(plaintext[pi])
            #print 'a: ',a
            b = pi % keyLength
            #print 'b: ',b
            #looks for the letter of pw that matches the alphabet, ex: e is 4
            c = self.alphabet.index(pw[b])
            #print 'c: ',c
            d = (a+c) % alphabetLength
            #print 'd: ',d
            ciphertext += self.alphabet[d]
            #print 'self.alphabet[d]: ', self.alphabet[d]
        return ciphertext

3 个答案:

答案 0 :(得分:3)

Python字符串是不可变的,因此您应该将变量名称重新分配给新字符串。

带有“__”的功能通常不是您真正想要使用的功能。让解释器使用内置的运算符/函数(在本例中为“+”运算符)为您调用。

所以,而不是:

self.finmix.__add__(fin)

我建议你试试:

self.finmix = self.finmix + fin

或同等的和terser:

self.finmix += fin

如果你在整个过程中做出这种改变,你的问题可能就会消失。

答案 1 :(得分:1)

我没有解决您的问题,但我有一些更一般的建议。

  • 私有方法.__add__.__contains__不应直接使用。您应该直接使用+in运算符。

  • 而不是通过while循环遍历self.alphabet的索引......

    while x < len(self.alphabet):
        print self.alphabet[x]
        x += 1
    

    你可以迭代字母

    for letter in self.alphabet:
        print letter
    
  • class Cipher:触发了一种向后兼容模式,该模式不适用于某些较新的功能。指定class Cipher(object):会更好。

答案 2 :(得分:0)

我猜的是以下内容:

self.finmix.__add__(fin)

#should be
self.finmix = self.finmix.__add__(fin)