こんにちは。まずはゆっくりとどうすればゴールを達成できるかタスクを分解していきましょう。
今回のゴール
文字列が与えられたときにbを見つけて<<>>で囲ってさらにその後ろに数字をつける。
例えば「aababa」なら「aa<<b>>1a<<b>>2a」のように。
ゴールは上記のようでいいですかね?
次にタスクを分解していきましょう。
いきなり正解のコードを載せてもいいのですが、下記の手順に従ってもう一度考えてコードを書いてみましょう!
※どうしても難しければ正解のコードを載せるので言ってください!
(1)まず簡単な例から考える
例えばいきなり長い文字列を考えるのではなく「aaba」といった短い文字列で考えましょう。
(2)文字列の特性を考える。
bを見つけるにはどうすれば良いでしょうか?人間なら前から順番にbを探していきます。
実はPythonは文字列をリストのように扱うことが出来ます。下記の小さいコードで試して見ましょう。
text = "aababa"
for t in text:
print(t)
---出力
a
a
b
a
b
a
(3)bを見つけたときの処理を考える
bを見つけたら<<>>で囲って数字をつけるんですよね。
まずは<<>>で加工方法を考えましょう。十分に考えたら下記のコードを試してみましょう。
text = "b"
if text == "b":
text = "<<" + text + ">>"
print(text)
(4)上記を踏まえて問題に再度取り組んでみましょう!
まずは考える=>ググってみる=>コードを書いて試してみる!という一連のサイクルがプログラミング学習の基本です!
ただ、どうしてもわからなければコメントください。
いったん、これで回答とします。
[追記1]
コメントの2つめの課題ですが惜しかった!
text = "aababa"
new_text = ''
for t in text:
if t == 'b':
#new_text = new_text.join(t) => ここを直しましょう!
# ↓のように!
new_text = new_text + t
print(new_text)
質問者さんの使ったjoinのコード何がおかしいかわかるでしょうか?
これは実はリスト型を文字列に変えるためのメソッドなのです。(よくわからなければここは今はスルーでもいいですよ。)
参考:文字列のリスト(配列)を連結・結合
[追記2]
新しいヒントです!
// わかりやすくするためにあえて冗長(まどろっこしい書き方をしています。)
text = "aababa"
new_text = ''
order = 0 # これをつかってみましょう!
for t in text:
if t == 'b':
t = "<<" + t + ">>"
new_text = new_text + t
else:
new_text = new_text + t
print(new_text)
上記のコードを動かしてみましょう!それから質問者さんのゴールに他に必要なものを考えてみましょう!
ヒントは定義されているだけで使われていないorder
という変数です。
[追記3]
これまでの追加ヒントを見てもわからない、、、ということであれば最後に回答を載せます!
ただ、(1)どう考えたのか?(2)何を調べて試したのか、について先にコメントをお願いします!
ちなみにPythonに関してはもちろん公式ドキュメントを読むのが一番ではあるのですがいきなりは正直キツイと思います。私は最初の頃は主に下記のサイトをよく読んでいました。
上記のドキュメントを読んでも理解できないということであれば、、、例えばドットインストールやUdemyで動画で学んでみたり、pyqといった学習サービスを使ってもみてもいいかもしれません。
※Udemyはしょっちゅうセールをしているので安い時期に教材を買うのがおすすめです。
あとは書籍で読むのが合っているなら「Python 初心者 本」などでググって出てきたものを何冊か本屋さんで立ち読みして確認してみましょう!
プログラミング学習の初期は中々キツイと思いますができるようになると面白いので頑張ってください!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/17 07:06
2021/05/17 08:25 編集
2021/05/17 08:28
2021/05/17 08:36
2021/05/17 14:00
2021/05/17 14:44
2021/05/18 00:00
2021/05/18 00:32