2017-02-21 3 views
0

Я делаю простую программу для перевода текста с помощью шифрования Ceasar. Вот мой код.Шифр ​​Ceasar в python

alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] 
text = "hello how are you" 
text = text.split(" ") 
new_text_array = [] 
key = 3 
for w in range(len(text)): 
    new_word_array = [] 
    word = list(text[w]) 
    for i in range(len(word)): 
     if word[i] in alphabet: 
      new_index = alphabet.index(word[i]) + key 
      if new_index > 25: 
       new_index -= 26 
      new_word_array += alphabet[new_index] 
    new_word = ''.join(new_word_array) 
    print(new_word) 
    new_text_array += new_word 
    print(new_text_array) 
new_text = ' '.join(new_text_array) 
print(new_text) 

Когда я запускаю код, в строке 20, он правильно печатает слово шифруется как строка, а в строке 21, где я добавить слова в массив, он добавляет каждую букву в качестве отдельного элемента в массиве вместо добавления целого слова. Я все еще довольно новичок в python, чего мне не хватает? Пожалуйста помоги. Извините за мой английский, надеюсь, вы поймете, что я пытаюсь сказать.

+4

Заменить '+ =' 'с Append (..)' ... –

+0

Спасибо за быстрый ответ. Он работает отлично. Cheers –

ответ

3

Вам необходимо использовать new_text_array.append(new_word).

В new_text_array += new_word+= означает, что вы добавляете все элементы второго массива в первый массив, поэтому Python перебирает new_word, потому что строка может быть также итерации с new_word[x], и добавляет все его элементы (буквы здесь) как отдельные элементы.

Другой вариант здесь new_text_array += [new_word], где вы просто положить new_word в массив в качестве единственного элемента

+0

Спасибо за объяснение, имеет смысл. –