-3

有没有像 change_alphabetical($string,$number) 这样的函数可以改变 $string, $number 中的每个字母的时间?

例子

print change_alphabetical("abc",2)

印刷:

"cde"

或者

change_alphabetical("abc",-1)

印刷:

zab
4

2 回答 2

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不被认为是线程安全的,并且将应用于整个程序。

于 2013-09-27T19:36:11.200 回答
2
import string

def change(word, pos):
    old = string.ascii_lowercase
    new = old[pos:] + old[:pos]
    return word.translate(string.maketrans(old, new))
于 2013-09-27T19:51:19.643 回答