前提
文字列メソッド s.split(sep) と同じ動作をする関数 my_split(s, sep) を実装したいです。
また、関数 my_split(s, sep) の中には関数my_find(メソッド s.find(t) と同じ動作をする関数です)を使用したいです。
def my_find(s, t): for i in range(0,len(s)): if my_startswith(s,t,i)==True: return i return -1
上がmy_find関数になります。
実現したいこと
メソッド s.split(sep) と同じ動作をする関数 my_split(s, sep) を下の手順のように考えて実装したいです。
- 区切った結果を保存する空リストを用意する
- s のうち,まだ調べていない部分を保存する変数(rest という名前とする)を s で初期化する
- my_find を用いて,rest に出現する最初の区切り文字列の位置(next_sep とする)を得る
- rest に区切り文字列が含まれる間(つまり next_sep != -1 である間),以下を繰り返す
- rest のうち最初の区切り文字列より前の部分を結果のリストに追加する
- rest のうち最初の区切り文字列の終わり以降の部分を再度 rest にセットする
- next_sep に my_find(rest, sep) の結果をセットする
- くり返し終了後の rest (つまり最後の区切り文字列より後の部分)を結果のリストに追加する
- 保存した区切り結果を return する
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
自分で上記の手順でコードを書きたいのですが3をどのように書いたら良いのか分からずコードが途中までしか書けていません。
# 入力: # s, sep: 文字列 # 出力: # 文字列 s を区切り文字列 sep で区切った結果のリスト def my_split(s, sep): r = "" #1を行いました rest = s #2の初期化を行いました #3の書き方が全く浮かびませんでした。申し訳ないです。 #4以降はfor文かwhile文を使おうと思っています。区切り文字列より前の部分と終わり以降をどのように区別したら分かりません。 while ~~~: r += restのうち最初の区切り文字列より前の部分 r += rest のうち最初の区切り文字列の終わり以降の部分 next_sep += my_find(rest,sep) return r
と考えているのですが、手順通りにコードを作るにはどうしたら良いのかわからずにいます。
直したい部分が明確になっておらず丸投げの形になってしまい申し訳ありません。
もしよろしければアドバイスをいただきたいです。
ご教授下さい。
試したこと
def my_split(s, sep): n = len(sep) r = [] i = my_find(s, sep) while i < 0: #i = my_find(s, sep) r.append(s[:i]) s = s[i+n:] r.append(s) return r
上は教えていただいたwhile True文を参考に作ってみたものですが、正しく実行されませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー