Есть ли такая функция, как change_alphabetical($string,$number), которая изменяет каждую букву в $string, $number раз вперед?
ПРИМЕР
print change_alphabetical("abc",2)
печатает:
"cde"
OR
change_alphabetical("abc",-1)
печатает:
zab
Есть ли такая функция, как change_alphabetical($string,$number), которая изменяет каждую букву в $string, $number раз вперед?
ПРИМЕР
print change_alphabetical("abc",2)
печатает:
"cde"
OR
change_alphabetical("abc",-1)
печатает:
zab
Я не знаю ни одного встроенного, который делает это, но вы можете свернуть свой собственный:
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()
. Затем он добавляет смещение по модулю 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
не считается потокобезопасным и будет применяться ко всей программе.
change_alpabetical('ab12cd', 1)
иchange_alphabetical('Ordóñez', -1)
? - person Hyperboreus   schedule 27.09.2013