2013-02-24 124 views
3

我想弄清楚如何在字符串中添加字符的副本,只要字符是元音即可。例如,如果我輸入單詞副本('app'),則理想情況下會返回'aaaapp!'。我知道字符串是不可改變的,但必須有一種方法!我一直盯着這幾個小時。Python:在字符串中添加字符的副本

注意:我不想要我的代碼的解決方案,最好只是讓我朝着正確的方向提示。 編輯:謝謝你的幫助!

我的想法之一是:word + = word + i * 4,但返回類似'appaaaa!'的內容。

def copy(word): 
    "('string') ==> ('string') Adds four copies of vowel and an '!' to the string" 
    vowel = 'aeiouAEIOU' 
    for i in word: 
      if i in vowel: 
       #Missing code Here 
    return word + '!' 
+0

不要太擔心字符串是不可變的。只需製作一個新的字符串。如果它們是更大的字符串(例如千字節或兆字節),則只需要擔心它。在計算機方面,製作新字符串的「成本」通常比操作現有字符串便宜。 – dawg 2013-02-24 19:22:28

回答

2

撰寫一個獨立的字符串,而您掃描輸入:

s = '' 
for i in word: 
    if i in vowel: 
    s += i*4 
    else: 
    s += i 
s += '!' 
+0

這裏,建立一個列表可能更有效率。 'lst.append(i)'或'lst.extend(i * 4)'而不是's + = i'或's + = i * 4'。然後在最後,你'。'加入(lst)'。 – mgilson 2013-02-24 18:59:40

+0

我遵循了OP的想法......我想他想知道他的想法如何完成一個有效的代碼。不要以爲他對效率感興趣。 – 2013-02-24 19:01:44

+0

我其實用過這個!起初,它沒有返回任何輔音,然後我修復它。 – AppDude27 2013-02-24 19:18:44

5

您可以使用re.sub很容易:

>>> re.sub('([aeiouAEIOU])',r'\1\1\1\1','string') 
'striiiing' 

或者,如果你想換人的數可變:

>>> N=4 
>>> re.sub('([aeiouAEIOU])',r'\1'*N,'string') 
'striiiing' 
0

您可以將字符串的每個字符複製到列表中,在您的閒暇時插入元音,然後將列表返回到字符串:''.join(mylist))

3

關鍵是創建一個新字符串。如果該字符不是元音,則只需將其複製到新字符串。如果它是元音,則將四個副本複製到新字符串中。然後你返回新的字符串。這裏有一種方法:

def copy(word): 
    vowels = set ("AEIOUaeiou") 
    return "".join(char * 4 if char in vowels else char for char in word) + "!"