执行双字母交换操作



我想更改输入中的字母。为此,我实现了一个适用于单数字母的词典。然而,如果存在";双字母";。例如,"text"应该与"rexr"一起返回,它确实这样做了。但是对于"textt",我希望它返回"rexss"。下面是所附的代码。有什么建议吗?

vowels = {
"t" : "r",
"r" : "s",
"s" : "b",
"b" : "t",
"T" : "R",
"R" : "S",
"S" : "B",
"B" : "T",
"tt" : "ss",
"rr" : "bb",
"ss" : "rr",
"bb" : "tt",
"TT" : "SS",
"RR" : "BB",
"SS" : "TT",
"BB" : "RR"
}
inputString = input()
outputString = ""
for character in inputString:
if character in vowels: 
outputString += vowels[character]
else:
outputString += character
print(outputString)

您可以为此使用正则表达式。确保您编写的正则表达式从最长的字符串开始,以便"tt"在"t"之前匹配:

inputString = 'text textt'
import re
regex = '|'.join(map(re.escape, sorted(vowels, key=len, reverse=True)))
# 'tt|rr|ss|bb|TT|RR|SS|BB|t|r|s|b|T|R|S|B'
re.sub(regex, lambda x: vowels.get(x.group()), inputString)

输出:'rexr rexss'

如果您想增量构建结果,可以使用带有字符串切片的while循环。for循环在这里不容易工作,因为您不知道每次迭代要跳过多少个字符。

user_input = input()
result_characters = []
idx = 0
while idx != len(user_input):
if user_input[idx:idx + 2] in vowels:
result_characters.append(vowels[user_input[idx:idx + 2]])
idx += 2
else:
result_characters.append(vowels.get(user_input[idx], user_input[idx]))
idx += 1
print(''.join(result_characters))

最新更新