2016-11-09 31 views
2

私は現在、文字"a"のすべてのインスタンスをstring1にチェックし、それをsubstringに置き換える必要がある質問に固執しています。例えば文字列を部分文字列に置き換える

は、元string1"apple"だった場合、私は"dragonpple"を返却する必要があるだろう、substring"dragon"であると言うことができます。

これまでのところ、私は私の試みを持っては、以下のとおりです。

def (string1, substring): 

    new_string= " " 

    for letter in string1: 
      if letter ! = "a": 
       new_string.append(letter) 
      elif letter = "a": 
       a = substring 

私は本当にこれを構造化する方法を知っているが、これは私の一般的な思考プロセスだっいけません。文字"a"を削除し、文字列自体を分割することなくsubstringに置き換える方法がわかりません。

また、インデックスや.removeメソッドを使用することはできません。助けを感謝します。

+0

'string1.replace(" a "、substring)'はどうでしょうか? – yper

答えて

5

ここにはいくつかの問題があります。あまりにも多くのあなたの元のコードを変更することなく、それらを打破してみましょう:

  • あなたが適切に名前を付けて定義し、定義は名前を欠い機能。たとえば:

    def replace_a(string_a, substring): ... 
    

    私は、これはコピー&ペーストの漏れかもしれない推測しています。

  • if letter ! = "a":SyntaxErrorある、! =!=として解釈されない(しかし、2つの別々のオペレータ!=として)、残念ながら、それはあまりにも固定必要があります。
  • elif letter = "a":は、別のSyntaxErrorである。 代入文=と等価チェックと混同してはならず、==と似ていません。
  • new_string.append(letter)は、TypeErrorである。メソッドappendが文字列に定義されていない場合、文字列はは不変であり、追加はオブジェクトを変更するメソッドです。 appendlistで入手可能です。
  • a = substringがはるかに:-(をしていません。あなたはaに割り当てると、単にそれを使用しないでください。最後に
  • 、あなたは何も返さない。あなたの機能が正しく文字列を作成した場合でも、あなたはreturnステートメントを使用していないので、それを取り戻すことはできません

をあなたが考える可能性の一つのアプローチは、文字列のリストを使用して、それを変異させることです。。。リストは変更可能ですので、希望あなたの心に変異させその後、最後にリストjoinを返し、その中のすべての文字列を返します。

def replace_a(string1, substring): 
    new_string= [] 
    for letter in string1: 
     if letter != "a": 
      new_string.append(letter) 
     elif letter == "a": 
      new_string.append(substring) 
    return "".join(new_string) 

これは、あなたの望む結果をもたらします。その後、

あなたがlistを使用できない場合は、それを変異させ、あなたがインクリメンタル新しい文字列を構築するために頼ることができjoin

def replace(string1, substring): 

    new_string= "" 

    for letter in string1: 
      if letter != "a": 
       new_string += letter 
      elif letter == "a": 
       new_string += substring 
    return new_string 

この再作成する前のlist基づく関数のように振る舞うが、+=に依存しています条件に基づいてnew_stringの古い値とletterまたはsubstringを結合して新しい文字列を作成します。もちろん


@yperによってコメントがなく、示唆するように、文字列の.replaceは、あなたの試みはあなたが後にしたものを達成していない方法を説明する点を打つことトリックを行うだろう。

あなたは近くにいましたが、いくつかの基本的なものが欠けています。私は助言をして、Python Tutorialを見てください。 :-)

+0

ねえ、助けてくれてありがとう!私はいくつか残っている質問がありますが。私はまだそれを学んでいないので、あなたがここで私のコードの一部として持っている "結合"機能を使用することは許されていないと確信しています。 "return new_string or string1?"で終わるようにコードを作成する方法はありますか? – Jessica

+0

十分な公正@ジェシカ。リストをまったく含まないソリューションを含めるように答えを更新しました。それがあなたを助けてくれることを願っています:-) –

+1

この意味では機能的ではありませんでしたが、「機能的なアプローチは文字列のリストを使用して変異させることです」と私の頭が悩まされています。良い説明のために+1。 –

関連する問題