добавление строки в строку

#python #string #add

#питон #строка #Добавить #python

Вопрос:

У меня проблема с добавлением строки к другой строке. Я новичок в Python.

Строка не может запомнить предыдущие значения, которые я добавил.

Кто-нибудь, кто может мне помочь? Ниже приведен фрагмент кода на Python.

Моя проблема заключается в цикле while функции encrypt().

ЗАРАНЕЕ БЛАГОДАРЮ.

 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
  

Комментарии:

1. ошибка… есть ли шанс, что вы укажете, в чем, по вашему мнению, проблема? или, может быть, опубликовать меньший пример … или, по крайней мере, опубликовать выходные данные и ожидаемый результат от вашей программы

2. Обратите внимание, что добавление двух строк — довольно дорогостоящая операция, поскольку она включает в себя создание нового объекта string и копирование в него содержимого двух строк. Если вы выполняете много подобных операций и скорость имеет некоторое значение, рассмотрите возможность использования вместо этого объекта StringIO из модуля cStringIO.

Ответ №1:

Строки Python неизменяемы, поэтому вам следует переназначить имя переменной на новую строку.

Функции с «__» в них обычно не являются тем, что вы действительно хотите использовать. Позвольте интерпретатору выполнить этот вызов за вас, используя встроенные операторы / функции (в данном случае оператор » «).

Итак, вместо:

 self.finmix.__add__(fin)
  

Я предлагаю вам попробовать:

 self.finmix = self.finmix   fin
  

или эквивалентный и более краткий:

 self.finmix  = fin
  

Если вы внесете такого рода изменения повсюду, ваша проблема, вероятно, исчезнет.

Ответ №2:

У меня нет решения вашей проблемы, но у меня есть пара более общих предложений.

  • Частные методы .__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): .

Ответ №3:

Я предполагаю, но следующее:

 self.finmix.__add__(fin)

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