2014-11-20 176 views
-1

我已经在询问这个问题之前检查过我的问题是否有解决方案。如果字符串中的字母替换为字符串中的字母

我在做python。我试图编写代码,它接受一个输入字符串,并且该字符串中的每个字母都是一个元音(aeiou),用它自己替换该元音四次。然后在末尾添加一个感叹号(!)。例如:

apple会看起来像aaaappleeee!

我尝试了多次,使这项工作没有任何效果。想知道你们是否可以看看我的代码,看看我做错了什么。拥抱与亲吻。克里斯托弗

def exclamation (string): 
    for i in range(0,len(string)): 
     if string[i] in 'aeiou': 
      string.replace(string[i],string[i*4]) 
     print(string + '!') 
+3

'string.replace'没有修改字符串,它返回与更换一个新的字符串。 – Barmar 2014-11-20 22:36:11

+0

此外,'string.replace'将替换它找到的字母的_first_副本,或者_all_;除了您要替换的特定副本之外的任何内容,因为它无法知道您要替换哪个副本。所以,如果你的单词“已经”,它会看到第一个“a”,并给你“aaaalready”,然后看到e并给你aaaalreeeeady,然后看到第二个a给你aaaaaaalreeeeady,等等。 “替换”几乎从来都不是你想要的。 – abarnert 2014-11-20 22:42:44

+0

另外,'string [i * 4]'与'string [i] * 4'不是一回事。第一个将在字符串的后面给你一个字符,或者引发一个'IndexError'。 – abarnert 2014-11-20 22:43:46

回答

0

您可以使用正则表达式是:

def exclamation(string): 
    newString = re.sub(r'([aeiou])', r'\1\1\1\1', string) 
    return newString + '!' 
+1

你忘了把匹配'newString = re.sub(r'([aeiou])'',r'\ 1 \ 1 \ 1 \ 1',string) ' – helloV 2014-11-20 22:51:44

0

字符串是不可变的如此替换的字符串返回一个新字符串每次。而不是只建立一个字符串作为你走这样的:

def exclamation (string): 
    buildString = "" 
    for i in range(0,len(string)): 
     if string[i] in 'aeiou': 
      buildString = buildString +string[i]*4 
     else: 
      buildString = buildString +string[i] 
    print buildString+"!" 
0
def exclamation(string): 
    new_string = '' 
    for c in string: 
     if c in 'aeiou': 
      new_string += c * 4 
     else: 
      new_string += c 
    new_string += '!' 
    return new_string 
0

replace不修改现有的字符串,它返回。还有一件事情在迭代它时不会修改列表,字符串或字典。使用string作为变量名是不好的做法。

def exclamation(my_string): 
    new='' 
    for i in range(0,len(my_string)): 
     if my_string[i] in 'aeiou': 
      new += my_string[i]*4 
     else: new += my_string[i] 
    print(new + '!') 

输出:采用

>>> exclamation('abcdef') 
aaaabcdeeeef! 

lambdamap

>>> def exclamation(my_string): 
...  return "".join(map(lambda x:x in 'aeiou' and x*4 or x,my_string))+'!' 
... 
>>> exclamation('abcdef!') 
'aaaabcdeeeef!' 
0

您可以通过遍历字符串,所以你不必与范围的混乱,并没有按str.replace”修改现有的字符串。总之,你可以这样做:

def exclamation(string): 
    for c in "aeiou": 
     string = string.replace(c, c*4) 
    print(string + "!") 
0

您也可以使用列表理解:

>>> def exclamation(s): 
... return ''.join([x*4 if x in 'aeiou' else x for x in 'apple']) + '!' 
... 
>>> exclamation('apple') 
'aaaappleeee!' 
相关问题