将字符串添加到字符串
问题描述:
我在将字符串添加到另一个字符串时遇到问题。我是Python的新手。将字符串添加到字符串
该字符串不记得我添加的以前的值。
任何人都可以帮助我?以下是Python中的代码片段。
我的问题是加密的,而环()。
感谢提前。
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
答
我猜,但以下几点:
self.finmix.__add__(fin)
#should be
self.finmix = self.finmix.__add__(fin)
答
Python中的字符串是不可改变的,所以你应该重新分配变量名一个新的字符串。
功能与“__”在他们一般都不会你真的想用什么。让解释器通过使用内置的运算符/函数(在本例中为“+”运算符)为您打电话。
因此,而不是:
self.finmix.__add__(fin)
我建议你试试:
self.finmix = self.finmix + fin
或同等及更简洁:
self.finmix += fin
如果你把这种整个的变化,你的问题可能会消失。
答
我没有解决你的问题,但我有一对夫妇的更多一般性建议。
的私有方法
.__add__
和.__contains__
并不意味着可以直接使用。您应该直接使用+
和in
运算符。-
而是通过
self.alphabet
while循环的指标去的......while x < len(self.alphabet): print self.alphabet[x] x += 1
你可以只遍历字母
for letter in self.alphabet: print letter
class Cipher:
触发一种向后兼容的模式不适用于某些较新的功能。指定class Cipher(object):
会更好。
err ...你指出你认为问题出在哪里的任何机会?或者发布一个更小的例子......或者至少发布程序的输出和期望输出 – 2011-06-10 06:16:58
请注意,添加两个字符串是一个相当昂贵的操作,因为它涉及创建一个新的字符串对象并复制这两个字符串的内容串入它。如果你做了很多这些操作并且速度有一些重要性,可以考虑使用cStringIO模块中的[StringIO](http://docs.python.org/library/stringio.html)对象。 – 2011-06-10 09:42:29