Python在每个元音之前添加字符串

时间:2016-01-22 15:06:42

标签: python python-2.7

我正在编写一个python代码,它接受一行插入的文本并添加字符串" tak"在每个元音之前(如果它没有开始一个单词,你只计算为元音)例如"我喜欢睡眠"会出现在" takI ltakitake sltaketakep"。我只是刚开始学习编码,因此还不知道太多复杂的功能。下面是我到目前为止的代码,它根本不起作用。

text = raw_input("enter the text to be translated")
textSplit = text.split()
count = 0
print len(textSplit)
Vowels = ["a","e","i","o","u"]
while count <= len(text):
  for i in textSplit:
    for i in Vowels:
      count += 1

然而,我无法弄清楚如何切割字符串,添加&#34; tak&#34;并连接它。 谢谢。

编辑:可以在不使用text.replace模块的情况下完成吗?

5 个答案:

答案 0 :(得分:4)

您可以使用regex

>>> re.sub(r'(?i)([aeiou])', r'tak\1', "I like sleep") 
'takI ltakiktake sltaketakep'

您还可以通过为每个元音循环一次字符串来使用str.replace。不要忘记Python中的字符串是不可变的,因此每次都必须创建一个新字符串:

>>> s="I like sleep"
>>> for v in 'aeiouAEIOU':
...    s=s.replace(v, 'tak'+v)
... 
>>> s
'takI ltakiktake sltaketakep'

在这种情况下,如果未找到元音或者每个元音被连接到元音的字符串s替换,则字符串tak与之前相同。每次在循环中创建一个新字符串并分配给s

答案 1 :(得分:1)

如果你需要忽略任何领先的'y',你将不得不对它进行一些细化:

text = raw_input("enter the text to be translated")

temp1 = temp2 = text[1:] if text[0] in ['y', 'Y'] else text

for vowel in ['a', 'e', 'i', 'o', 'u', 'y']:
    temp2 = temp2.replace(vowel, 'tak{}'.format(vowel))
    temp2 = temp2.replace(vowel.upper(), 'tak{}'.format(vowel.upper()))

text = text.replace(temp1, temp2)
print text

对于“我喜欢睡觉”的输入,这给出了:

takI ltakiktake sltaketakep

'黄色':

ytakelltakow

'火鸡':

ttakurktaketaky

如果由于某种原因,你真的不想使用str.replace,你可以这样做:

text = raw_input("enter the text to be translated")

temp2 = text[1:] if text[0] in ['y', 'Y'] else text
vowels = ['a', 'e', 'i', 'o', 'u', 'y']

temp2 = ''.join(['tak{}'.format(letter) if letter.lower() in vowels else letter for letter in temp2])

if text[0] in ['y', 'Y']:
    text = text[0] + temp2
else:
    text = temp2

print text

答案 2 :(得分:1)

您可以使用re.sub

re.sub(r'([aeiou])', r'(exampleReplace)\1', text)

示例:

text = 'Text'
print(re.sub(r'([aeiou])', r'(exampleReplace)\1', text))
>> T(exampleReplace)ext

答案 3 :(得分:0)

以下方法可行:

text = 'I like sleep'
vowels = set("aeiou")
modified_text = ''.join(['tak'+letter if letter.lower() in vowels else letter for letter in text])
print(modified_text)

<强>输出

takI ltakiktake sltaketakep

(注意:我认为你的样本输出中缺少k

答案 4 :(得分:0)

使用 list()代替 split()。我还使用enumerate同时获取索引和值。 修改后的代码:

text = "I like banana"
textSplit = list(text)
Vowels = ["a","e","i","o","u"]
for index,letter in enumerate(textSplit):
    if letter.lower() in Vowels:
        textSplit[index] = "tak" + letter
print "".join(textSplit)

输出:

takI ltakiktake btakantakantaka