替换字符串中的所有元音 - RETURN不打印

时间:2014-05-01 02:29:33

标签: python printing replace return

我怎样才能编写一个带字符串的函数,并将每个元音替换为自身的任意数量的连续副本进行RETURNS。

def replace(word):
    for c in word:
        if c in 'aeiouAEIOU':
            return word.replace(c, c*5)

我的代码只将更改应用到第一个元音然后停止,我认为是因为我使用"返回"而不是" print"。然而,我的作业在创建"返回"的功能时非常具体。或"打印" - 这个人说"返回"一个新的字符串。

2 个答案:

答案 0 :(得分:2)

有两个主要问题,

  1. 在第一次元音配对后,您将立即返回。

  2. 您的目的是在迭代时更改word

  3. 由于字符串在Python中是不可变的,因此每次更改字符串时都需要创建新字符串。对于这种特殊情况,我们可以使用list comprehension创建一个新的字符列表,然后最后将它们连接在一起,构造一个像这样的新String

    def replace(word):
        return "".join([c * 5 if c in 'aeiouAEIOU' else c for c in word])
    
    assert replace("a")  == "aaaaa"
    assert replace("ab") == "aaaaab"
    assert replace("B")  == "B"
    

    此程序从for c in word的单词中取出每个字符,然后检查if c in 'aeiouAEIOU'。如果这是真的,那么将列表的当前元素设为c * 5,否则将当前元素保留为c本身。因此,在加入之前,对于单词Welcome

    ,列表看起来应该是这样的
    def replace(word):
        print [c * 5 if c in 'aeiouAEIOU' else c for c in word]
        return "".join([c * 5 if c in 'aeiouAEIOU' else c for c in word])
    
    replace("Welcome")
    # ['W', 'eeeee', 'l', 'c', 'ooooo', 'm', 'eeeee']
    

    然后我们与"".join一起加入Weeeeelcooooomeeeee

    您可以将程序概括一点

    def replace(word, count):
        return "".join([c * count if c in 'aeiouAEIOU' else c for c in word])
    
    assert replace("Welcome", 2) == "Weelcoomee"
    assert replace("Welcome", 3) == "Weeelcooomeee"
    

答案 1 :(得分:1)

使用列表:

def replace(word):
    newword=[]
    for c in word:
        if c.lower() in 'aeiou':
            newword.append(c*5)
        else:
            newword.append(c)
    return ''.join(newword)

或使用字符串替换

def vowelreplace(word):
    vowels='aeiouAEIOU'
    for c in vowels:
        word=word.replace(c, c*5)
    return word

列表理解的最简单方法:

def vowelreplace(word):
    return ''.join([i*5 if i in 'aeiouAEIOU' else i for i in word])