Я не знаю ни встроенных команд, что делает это, но вы можете свернуть свой собственный:
def change(string, position):
alphabet = "abcdefghijklmnopqrstuvwxyz"
indexes = [alphabet.find(char) for char in string]
new_indexes = [(i + position) % 26 for i in indexes]
output = ''.join([alphabet[i] for i in new_indexes])
return output
print change("abc", -1) # zab
Это по существу принимает каждый символ во входной строке, и преобразует его в числовую позицию с помощью метода some_list.find()
. Затем он добавляет смещение, mod 26, чтобы получить новый индекс, а затем новую строку.
Имейте в виду, что это работает только с строчными буквами (хотя вы всегда можете сделать string = string.lower()
), и вам нужно будет отрегулировать, если вы хотите использовать другой алфавит, кроме английского.
Если вы хотите, чтобы код для работы на международном уровне, можно использовать locale
модуль, чтобы получить местный алфавит дал некоторый произвольный язык:
import locale
locale.setlocale(locale.LC_ALL, '')
import string
def change(string, position):
alphabet = string.lowercase
indexes = [alphabet.find(char) for char in string.lower()]
new_indexes = [(i + position) % len(alphabet) for i in indexes]
output = ''.join([alphabet[i] for i in new_indexes])
return output
В настоящее время это просто получает алфавит любой местный для текущего компьютера установлено значение. Я считаю, что вы можете изменить базовый язык, отредактировав второй аргумент в locale.setlocale
.
Атрибут string.lowercase
затем вернет все буквы нижнего регистра данного языка в порядке.
Имейте в виду, что locale.setlocale
не считается потокобезопасным и распространяется на всю программу.
http://code.activestate.com/recipes/578545-caesar-ciphers-program-in-python/ –
Каков ожидаемый результат для 'change_alpabetical ('ab12cd', 1) и' change_alphabetical («Ордоньес», -1) '? – Hyperboreus