3

私はこれをしたい:

>>> special = 'x'
>>> random_function('Hello how are you')
'xxxxx xxx xxx xxx'

基本的に文字列を返したい:{(str)-> str}

変数を未定義にし続けます。

申し訳ありませんが、これは私の最初の投稿です。

4

4 に答える 4

4

Python の文字列は不変であるため、メソッドを使用するたびreplace()に新しい文字列を作成する必要があります。replace の各呼び出しも、文字列全体をループする必要があります。これは明らかに非効率的ですが、この規模では目立ちません。

代替手段の 1 つは、リスト内包表記 ( docstutorial ) を使用して文字列を 1 回ループし、新しい文字のリストを作成することです。このisalnum()メソッドは、英数字のみを置換するためのテストとして使用できます (つまり、スペース、句読点などはそのままにしておきます)。

最後のステップは、join()メソッドを使用して文字を結合して新しい文字列にすることです。この場合、空の文字列を使用して''、間に何も入れずに文字を結合していることに注意してください。使用した場合は' '.join(new_chars)各文字の間にスペースがあり、使用した場合'abc'.join(new_chars)は文字abcが各文字の間にあります。

>>> def random_function(string, replacement):
...     new_chars = [replacement if char.isalnum() else char for char in string]
...     return ''.join(new_chars)
...
>>> random_function('Hello how are you', 'x')
'xxxxx xxx xxx xxx'

もちろん、おそらくこの関数にはrandom_function()...よりも論理的な名前を付ける必要があります。

于 2012-10-13T21:25:08.527 に答える
4

これは、正規表現を使用して簡単に実行できます。

>>> re.sub('[A-Za-z]', 'x', 'Hello how are you')
'xxxxx xxx xxx xxx'
于 2012-10-13T19:41:46.943 に答える
2
def hide(string, replace_with):
    for char in string:
        if char not in " !?.:;":  # chars you don't want to replace
            string = string.replace(char, replace_with) # replace char by char
    return string

print hide("Hello how are you", "x")
'xxxxx xxx xxx xxx'

stringモジュールとreモジュールもチェックしてください。

于 2012-10-13T20:40:23.607 に答える
0

これをコメントに追加するか、回答全体に追加する必要があるかわかりませんか? 他の誰かが示唆したように、正規表現を使用することをお勧めしますが、文字を使用し\wてアルファベットの任意の文字を参照できます。完全なコードは次のとおりです。

  import re

 def random_function(string):
     newString=re.sub('\w', 'x', string) 
     return(newString)

 print(random_function('Hello how are you'))

xxxxx xxx xxx xxx を出力する必要があります

于 2016-03-30T16:15:14.563 に答える