【问题标题】:replace ALL vowels in a string - RETURN not print替换字符串中的所有元音 - RETURN 不打印
【发布时间】:2014-06-17 13:07:57
【问题描述】:

我怎么能想写一个函数,它接受一个字符串并返回它,每个元音都被它自己的任意数量的连续副本替换。

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

我的代码仅将更改应用于第一个元音然后停止,我认为这是因为我使用的是“return”而不是“print”。然而,在创建“返回”或“打印”函数时,我的任务非常具体——这个任务是“返回”一个新字符串。

【问题讨论】:

  • 我不知道这个问题有什么问题。至少 OP 已经尝试了一些东西。
  • 能否提供示例字符串和预期结果

标签: python printing replace return


【解决方案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])

【讨论】:

    【解决方案2】:

    主要有两个问题,

    1. 您将在第一个元音匹配后立即返回。

    2. 您的意图是在迭代 word 时对其进行更改。

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

    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"
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2018-10-21
      • 2017-01-18
      • 2019-05-04
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多