0

Google Python クラスの一部である string1 演習に取り組んでいます。私が問題を抱えている質問はCです:

C. fix_start
Given a string s, return a string
where all occurences of its first char have
been changed to '*', except do not change
the first char itself.
e.g. 'babble' yields 'ba**le'
Assume that the string is length 1 or more.
Hint: s.replace(stra, strb) returns a version of string s
where all instances of stra have been replaced by strb.

ループを使用して各文字を最初の文字と比較し、一致するものを「*」に置き換えることを考えていました。もっと簡単な方法が必要だと思います。誰か提案はありますか?

4

4 に答える 4

1

はい、それを行う簡単な方法があり、質問はすでにヒントを提供しています。

s.replace(stra, strb)のすべてのインスタンスstraが に置き換えられたバージョンの string を返しますstrb

その機能をどのように使用するかを考えてください。

于 2012-12-20T17:46:02.367 に答える
1

これが私が得たもので、ループは必要ありません。

def fix_start(s):

  return s[0]+s[1:].replace(s[0], '*')

これは、文字列が '' ではないと想定する必要があることを考慮してのみ機能します。その場合、戻り行を本文の if に移動し、最初に len をチェックする必要があります。

于 2013-03-07T03:10:01.280 に答える
1

すでにヒントが提供されており、ループを使用する必要はありません。

を使用することを提案しs.replace(stra, strb)、それが持つ効果について説明しているので、問題のステートメントを考えるsと、 、stra、およびstrbがどうあるべきかを見てみましょう。

  • 最初の文字ののオカレンスのみを置き換えたいので、 sins.replace(stra, strb)は 2 番目の文字以降のすべてである必要があります。これは、スライスを使用して取得できますs[1:](s関数に渡されるパラメーターは次のとおりです)。
  • 最初の文字のすべての出現を置き換えたいので、その最初の文字にstraする必要があります、またはs[0](再びsパラメーターです)。
  • strbは簡単です。マッチを に置き換えていると書かれている*ので、そうstrbです'*'

したがって、関数のどこかで が必要になりs[1:].replace(s[0], '*')、ほとんどの場合、そこに到達します。

于 2012-12-20T17:53:11.113 に答える