python a = b b = c函数ETC

时间:2013-09-27 19:32:11

标签: python function alphabetical

是否有像change_alphabetical($ string,$ number)这样的函数改变$ string中的每个字母,$ number次转发?

示例

print change_alphabetical("abc",2)

打印:

"cde"

OR

change_alphabetical("abc",-1)

打印:

zab

2 个答案:

答案 0 :(得分:2)

我不知道有任何内置功能,但你可以自己动手:

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不被视为线程安全,并将适用于整个程序。

答案 1 :(得分:2)

import string

def change(word, pos):
    old = string.ascii_lowercase
    new = old[pos:] + old[:pos]
    return word.translate(string.maketrans(old, new))