2017-01-09 25 views
1

私の宿題は、指定された文字列から与えられた名前の頭文字を削除し、ユーザ入力を使って変数を定義することです。以下のスクリプトを実行すると、1つの名前しか登録されません。与えられた文字列から文字を削除する

def removeChar(initials, string): 
    initials = initials 
    string = string 
    for char in initials: 
     modified = string.replace(char, "") 
    print modified 
    return modified 



def getInitials(name, string): 
    initials = "" 
    for i in name.lower().split(): 
     initials += i[0] 
    print initials 
    removeChar(initials, string) 



def main(): 
    name = raw_input("What is your name? \n") 
    string = raw_input("What string would you like to remove your initials from? \n") 
    getInitials(name, string) 

これが出力されます。

What is your name? 
John Doe 
What string would you like to remove your initials from? 
Arjajbian Ndigdhts 

Arjajbian Nights 

なぜそれが最初のイニシャルを削除しないのでしょうか?

+5

ちょうどいいヒント: 'string = string'と' initials = initials'はまったく必要ありません。 –

+0

Pythonを使用して以来、しばらくしてきましたが、名前の間のスペースを削除して、文字を基にした配列を作成しようとしましたか? –

+0

また、 'string'はPython標準ライブラリの一部です... –

答えて

6

あなたの問題はここにある:

modified = string.replace(char, "") 

あなたは常に元の文字列にreplaceを使用しているので、元の文字列から個々の文字を削除し、新しいものを返します。ちょうどstring = string.replace(char, "")

またはそれ以外の場合、関数は常に最後のが削除された元の文字列を返します。

+0

ありがとう、これは固定されている、私はそれが私を許可するときに答えをマークします –

0

@ juanpa.arrivillagaはあなたの問題を指摘していますが、文字列jdを入力文字列から削除するはるかにPythonの方法があります。 generator expressionの使用:

>>> input_str = "Arjajbian Ndigdhts" 
>>> ''.join(c for c in input_str if c.lower() not in 'jd') 
'Arabian Nights' 
>>> 

これはinput_strを反復処理し、唯一ないjまたはdである''.join()に文字を渡すことによって動作します。あなたはいけない

+0

私はまだこれを学んだとは思わないが、非常にありがとう –

+0

@エシュフラ確かな事。あなたがもっと学びたいのであれば、私は思考するだけのことをしました;-)私はまた、_generator式_に関するページへのリンクも含みました。 –

0

は、それはまた、すでに であると、これは同じこの変数を作るためには何もあなたの占いもしないように私はそれはあなたがこれを作成します。この

modified = string.replace(char, "") 

だと思う

initials = initials 
    string = string 

が必要modifiedという変数がありますが、後でStringを取得するコードではmodified のいずれかが変更されますString to modified apart fr omを上書きするか、modified to stringを変更してうまくいけばうまくいくでしょう

関連する問題