7

文字列「aeiou」の「i」以外のすべての文字を「!」に置き換えたい

私が書いた:

def changeWord(word):
    for letter in word:
        if letter != "i":
            word.replace(letter,"!")
    return word

これはオリジナルを返すだけです。「!!i!!」を返すにはどうすればよいですか?

4

6 に答える 6

11

Python の文字列は不変であるため、その場で変更することはできません。str.replaceのドキュメントをチェックしてください:

部分文字列 old をすべて new に置き換えた文字列のコピーを返します。オプションの引数 count が指定されている場合、最初の count 個の出現のみが置き換えられます。

したがって、それを機能させるには、次のようにします。

def changeWord(word):
    for letter in word:
        if letter != "i":
            word = word.replace(letter,"!")
    return word
于 2012-11-18T03:17:35.157 に答える
6

このような場合、正規表現は非常に強力です。これは、「i」以外の文字を「!」に置き換えます。

import re
str = "aieou"
print re.sub('[^i]', '!', str)

戻り値:

!!i!!
于 2012-11-18T03:18:34.683 に答える
3

split()と を使用したこのようなものjoin()

In [4]: strs="aeiou"

In [5]: "i".join("!"*len(x) for x in strs.split("i"))
Out[5]: '!!i!!'
于 2012-11-18T03:15:07.177 に答える
3

ワンライナーとしてこれを試してください:

def changeWord(word):
    return ''.join(c if c == 'i' else '!' for c in word)

答えはジェネレーターを使用して簡潔に表現できます。この場合、正規表現やループを使用する必要はありません。

于 2012-11-18T03:32:51.767 に答える
2

誰も愛していないようですstr.translate:

In [25]: chars = "!"*105 + 'i' + "!"*150

In [26]: 'aeiou'.translate(chars)
Out[26]: '!!i!!'

お役に立てれば

于 2012-11-18T03:35:35.237 に答える