簡體   English   中英

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

[英]Python add string before every vowel

我正在編寫一個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

但是,我還無法弄清楚如何分割字符串,添加“ tak”並將其連接起來。 謝謝。

編輯:可以不使用text.replace模塊來完成嗎?

您可以使用正則表達式

>>> 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

如果您需要忽略任何前導“ 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

您可以使用re.sub

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

例:

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

以下將起作用:

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

使用list()而不是split() 我還使用枚舉來同時獲取索引和值。 修改后的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM