Методы str
maketrans
и translate
идеально подходят для этого типа задач:
from string import ascii_lowercase as alphabet
# One time initialization:
translation = str.maketrans(alphabet, alphabet[1:] + alphabet[:1])
# Can be reused multiple times:
words = ('hello', 'add', 'inks ohm', 'end')
for word in words:
new_word = word.translate(translation)
print(word, '->', new_word)
ВЫХОД
% python3 test.py
hello -> ifmmp
add -> bee
inks ohm -> jolt pin
end -> foe
%
программа, которая принимает слово или предложение
Ваш исходный код, ни принятый в настоящее время код, обрабатывает предложение по мере вытеснения пробелов. Приведенный выше код будет правильно обрабатывать предложения, передавая вещи, которые не являются буквами.
Вот переделка вашего кода для правильной обработки предложений:
from string import ascii_lowercase as alphabet
phrase = 'inks ohm'
new_phrase = ''
for character in phrase:
if character in alphabet:
new_position = (alphabet.index(character) + 1) % len(alphabet)
character = alphabet[new_position]
new_phrase += character
print(new_phrase)
Конечно, все они обрабатывают только нижний регистр, и для правильной обработки предложений вам необходимо расширить их, чтобы также обрабатывать верхний регистр. Упражнение оставлено читателю.