我正在辅导一个朋友在python中,而不是自己很擅长。这项任务是编写一个脚本,用于反转一些外来语言,在添加字母“p”后重复每个元音序列。一些例子:优化初学python脚本关于子串替换
tomato -> topomapatopo
groovy->groopoovy
和beautiful -> beaupeautipifupul
的目标,是扭转这一点。来自groopoovy -> groovy
。
由于这是一个荷兰的任务,有一个例外:“ij”被视为一个元音。所以blijpij -> blij
(我发现很多事情很复杂)
我的解决方案对我来说似乎相当笨重,我对更好,更优雅的解决方案感兴趣。由于这是编程的入门课程,不幸的是,基础知识是关键。
word = input()
vowels = ('a', 'e', 'i', 'o', 'u')
position = 0
solution = ""
while position < len(word):
if word[position] == 'p': # obviously, search for the letter 'p'
add = 1 # keep track of the sub string size
group = ""
while True: # loop to get consecutive vowels
if word[position + add] in vowels:
group += word[position + add]
if word[position + add] == 'i' and word[position + add + 1] == 'j': # recognize the "ij"
group += 'j'
add += 1
add += 1
else:
break
if position+add == len(word): # stay within the bounds of the string
break
add -= 1
if word[position - add:position].lower() == group.lower() and group != "":
position += add
else:
solution += 'p'
else:
solution += word[position]
position += 1
print(solution)
这确实是我寻找的更优雅的解决方案。谢谢保罗。当'c =='p''时,它需要一个小小的调整来检查左侧和右侧的部分,否则,'海角'这样的字会被破坏。 –
该程序假定输入单词根据您的配方格式化,并且不检查它的语法或拼写错误。你的版本也不检查。 “斗篷”不是有效的输入。 “capapepe”*是*有效并正确给出结果“斗篷”。 –