是否有像change_alphabetical($ string,$ number)这样的函数改变$ string中的每个字母,$ number次转发?
示例
print change_alphabetical("abc",2)
打印:
"cde"
OR
change_alphabetical("abc",-1)
打印:
zab
答案 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))