функция python a=b b=c ETC

Есть ли такая функция, как change_alphabetical($string,$number), которая изменяет каждую букву в $string, $number раз вперед?

ПРИМЕР

print change_alphabetical("abc",2)

печатает:

"cde"

OR

change_alphabetical("abc",-1)

печатает:

zab

person Toalp    schedule 27.09.2013    source источник
comment
code.activestate.com/recipes/   -  person Ashwini Chaudhary    schedule 27.09.2013
comment
Каков ожидаемый результат для change_alpabetical('ab12cd', 1) и change_alphabetical('Ordóñez', -1)?   -  person Hyperboreus    schedule 27.09.2013


Ответы (1)


Я не знаю ни одного встроенного, который делает это, но вы можете свернуть свой собственный:

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 не считается потокобезопасным и будет применяться ко всей программе.

person Michael0x2a    schedule 27.09.2013