有没有像 change_alphabetical($string,$number) 这样的函数可以改变 $string, $number 中的每个字母的时间?
例子
print change_alphabetical("abc",2)
印刷:
"cde"
或者
change_alphabetical("abc",-1)
印刷:
zab
有没有像 change_alphabetical($string,$number) 这样的函数可以改变 $string, $number 中的每个字母的时间?
例子
print change_alphabetical("abc",2)
印刷:
"cde"
或者
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()
方法将其转换为数字位置。然后它添加偏移量,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
不被认为是线程安全的,并且将应用于整个程序。
import string
def change(word, pos):
old = string.ascii_lowercase
new = old[pos:] + old[:pos]
return word.translate(string.maketrans(old, new))