質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1314閲覧

番号を付けて更新する方法を教えてください。

hissa_hama

総合スコア6

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/17 05:02

Python初心者です。

テキスト内の「b」を見つけて、それを「<<」「>>」で囲み、「>>」の後に何個目かを数字で入れたいのですが、方法がわかりません。

今のコードは以下のような感じです。

text = 'aaaaa<<b>><<b>>aaaaaa. aaaaaa<<b>>aaaaaaaa. aaaaaa<<b>>aaaaaaaa.' for i in range(x.count('>>')): text = text.replace('>>','>>*') print(text)

aaaaa<<b>>*<<b>>*aaaaaa. aaaaaa<<b>>*aaaaaaaa. aaaaaa<<b>>aaaaaaaa.
aaaaa<<b>>**<<b>>**aaaaaa. aaaaaa<<b>>**aaaaaaaa. aaaaaa<<b>>aaaaaaaa.
aaaaa<<b>>
<<b>>***aaaaaa. aaaaaa<<b>>*aaaaaaaa. aaaaaa<<b>>*aaaaaaaa.
aaaaa<<b>>
<<b>>****aaaaaa. aaaaaa<<b>>****aaaaaaaa. aaaaaa<<b>>****aaaaaaaa.

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。まずはゆっくりとどうすればゴールを達成できるかタスクを分解していきましょう。

今回のゴール

文字列が与えられたときに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 05:57

編集2021/05/17 15:33
digitalhimiko

総合スコア142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hissa_hama

2021/05/17 07:06

ご連絡ありがとうございます。 大変申し訳ございませんが、やはり先へ進めませんでした。 何か追加でヒントをいただけますでしょうか。
digitalhimiko

2021/05/17 08:25 編集

了解です! ただ新しいヒントを出す前に先に次の課題に取り組んでみてください。 出来たスクリプトはこのコメントへの返信かこの質問への回答として出して見せてくださいねー [課題] 文字列”aabab”が与えられた時、(2),(3)で学んだ考え方を活かして、文字列をfor文で回して、bだけprintするスクリプトを作る [期待する出力] b b
hissa_hama

2021/05/17 08:28

ありがとうございます。 以下のようにしてみました。 text = "aababa" for t in text: if t == 'b': print(t)
digitalhimiko

2021/05/17 08:36

正解です!! 次はそのコードを元に次の課題に取り組んでみてください! [課題] 新しい空の文字列の入った変数new_textを用意。文字列”aabab”が与えられたとき先程と同じようにfor文を回して”b”だけnew_textに追加されるようにしましょう。 最後にnew_textをprintしましょう。 [期待する出力] bb [念の為のヒント] Pythonでは文字列を簡単に連結させることが出来ます! a = “ho” a = a + “ge” print(a) # => hogeと出力されます!
hissa_hama

2021/05/17 14:00

すみません。調べたりしたんですが、わかりませんでした。 前回同様に、縦になら並ぶのですが、、、 text = "aababa" new_text = '' for t in text: if t == 'b': new_text = new_text.join(t) print(new_text) text = "aababa" new_text = '' for t in text: if t == 'b': new_text = f'{t}' print(new_text)
digitalhimiko

2021/05/17 14:44

おしい!! 回答の方に課題の答えと追加ヒントを記載しますね。
hissa_hama

2021/05/18 00:00

ありがとうございます。なんとか動きました。 新しいヒントを入れてくださり、ありがとうございます。 こちらを参考にさらに進めてみます。 引き続きよろしくお願いします。
hissa_hama

2021/05/18 00:32

text = "aababa" new_text = '' #変更(更新)したものをここに入れます。 order = 0 # 順番を更新して、こちらに入れます。 for t in text: if t == 'b': t = "<<" + t + ">>" order += 1 new_text = new_text + t + str(f'{order}') else: new_text = new_text + t print(new_text) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 希望通り、以下のように出力されました。 aa<<b>>1a<<b>>2a 演習問題形式で進めていただき、大変面白かったです。 途中苦戦したところもありましたが、何とかたどり着けて良かったです。 誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問