しーなのたらたらプログラミング学習日記

よれたOLの、びみょーなプログラム学習日記です

Chapter23:文字列の操作(2番目のindex):find()とか

こんばんは、ちょっとメンタルだだ下がりで
いつもより4割増しくらいで、よれております、しーなです。

週末までたどりつきたい。。。
お預けにしてまだ見てないアニメをみて、だらだらすごすんだーーー。
「ダンダダン」とか、「来世は他人がいい」をみるんだーー><
「チ」だって、まだみてないんだからー!

ということを燃料に、ふらふら生きておりますw
さて、ちらっと課題もアップするね。

Checkio 20:home second_index
問題:二つの文字列が与えられます。一つ目の文字列の中で、二つ目の文字が二番目に表示されるインデックスを返してください。
second_index("sims", "s") == 3
second_index("find the river", "e") == 12
second_index("hi", " ") == None
second_index("hi mayor", " ") == None
second_index("hi mr Mayor", " ") == 5


解き方

  • ただただ、find()を使って解きたい。通常は1回目の位置を返す。
  • →2回目を返すにはどうする?
  • indexでもとけそう

find():特定の文字列の位置を取得


第二引数startを指定するとその位置以降が対象、さらに第三引数endを指定するとその位置の前までが対象として検索してくれる。

知らなかったけれど、findには引数を3つまでつかえるそうです。

   data="Why are you asking me that?"
   point=data.find("are",1)
   print(point)
   #4

1文字以降を検索してくる

   point=data.find("are",5,10)
   print(point)
   #-1

5文字目から10文字目までを検索してくる

なるほどー、ではこの機能を使って確認してみよう 1回目の出現位置はすぐとれるので、
1回目の値から、ずらした位置から調べればいいと思うの!

答え

def second_index(text,symbol):
   point=text.find(symbol)
   sepoint=text.find(symbol,point+1)
   return sepoint if sepoint!=-1 else None

おおーーなんか、今日の答えは、いつもよりましじゃなーい?
else Noneのところにreturnを書かなくてもいいのかちょっと心配だったけど。
いいみたい。(要するによく理解はしていないww)

ほかの人の解を見てみても、
indexを使ってた人はいるけど、だいたい似たような書き方をしてました!
(いつものように、かけ離れた解ではなかったw)

def second_index(text,symbol):
   point=text.find(symbol,text.find(symbol)+1)
   return point if point!=-1 else None

整理すると、こんな感じ?