0

文字列を入力として受け取り、各母音に4を掛けて「!」を付けた同じ文字列を返そうとしています。最後に追加しました。元。「こんにちは」が戻ります、「heeeelloooo!」

def exclamation(s):
'string ==> string, returns the string with every vowel repeating four times and an exclamation mark at the end'
vowels = 'aeiouAEIOU'
res = ''
for a in s:
    if a in vowels:
        return s.replace(a, a * 4) + '!'

上記のコードは「heeeello!」を返すだけです。また、母音が等しい('a'、'e'、'i'、'o'、'u')インタラクティブシェルで試してみましたが、同じコードを使用すると次のようになります。

>>> for a in s:
if a in vowels:
    s.replace(a, a * 4) + '!'

「heeeello!」「こんにちは!」

1つだけではなく、各母音を乗算するにはどうすればよいですか?

4

2 に答える 2

8

私はここで個人的に正規表現を使用します:

import re

def f(text):
    return re.sub(r'[aeiou]', lambda L: L.group() * 4, text, flags=re.I) + '!'

print f('hello')
# heeeelloooo!

これには、文字列を1回だけスキャンするという利点があります。(そして、IMHOはそれが何をしているのかについてかなり読みやすいです)。

于 2013-02-22T02:37:23.630 に答える
5

現状では、文字列をループしていて、文字が母音の場合は、文字列内のその母音を4つに置き換えてから、停止します。それはあなたがやりたいことではありません。代わりに、母音をループして文字列内の母音を置き換え、結果を入力文字列に割り当てます。完了したら、感嘆符が追加された結果の文字列を返します。

def exclamation(s):
    'string ==> string, returns the string with every vowel repeating four times and an exclamation mark at the end'
    vowels = 'aeiouAEIOU'
    for vowel in vowels:
        s = s.replace(vowel, vowel * 4)
    return s + '!'
于 2013-02-22T02:35:59.173 に答える