добавление строки в строку - PullRequest
1 голос
/ 10 июня 2011

У меня проблема с добавлением строки в другую строку. Я новичок в 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

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

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

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

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

self.finmix.__add__(fin)

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

self.finmix = self.finmix + fin

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

self.finmix += fin

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

1 голос
/ 10 июня 2011

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

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

0 голосов
/ 10 июня 2011

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

self.finmix.__add__(fin)

#should be
self.finmix = self.finmix.__add__(fin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...