Pythonで「言葉」を扱う:文字列操作の基本から応用までを優しく学ぶ
![]()
【Yuki】
今日はPythonの「文字列」について一緒に勉強していきましょう。
プログラミングにおいて、数値と同じくらい……いえ、それ以上に触れる機会が多いのがこの文字列です。
画面にメッセージを表示したり、ユーザーが入力した文字を処理したり……。
少し地味に感じるかもしれませんが、とても奥が深くて、知れば知るほど面白い分野だと思います……。
![]()
【Hiroki】
よろしくお願いします!
文字列って、単に文字が並んでいるだけだと思っていましたけど、Pythonだと色々なことができるんですよね?
今までなんとなく使っていましたが、基礎からしっかり理解したいです。
![]()
【Yuki】
その意気込み、素敵だと思います……。
まずは基本的な作り方から見ていきましょう。
Pythonでは、文字をシングルクォーテーション(')かダブルクォーテーション(")で囲むことで文字列として定義します。
name = 'Python'
message = "こんにちは"
どちらを使っても基本的には同じですが、例えば「I'm a student」のように文字列の中にシングルクォーテーションが含まれる場合は、外側をダブルクォーテーションで囲むとスムーズですよ。
文字列の結合と繰り返し
![]()
【Hiroki】
なるほど、使い分けができるんですね。
複数の文字列をくっつけたい時はどうすればいいんでしょうか?
![]()
【Yuki】
文字列同士を繋げるには、プラス演算子(+)を使います。
また、同じ文字を繰り返したい時はアスタリスク(*)が使えるんです。
少し試してみましょうか。
greeting = "こんにちは" + "、" + "Hirokiくん"
print(greeting) # こんにちは、Hirokiくん
laugh = "は" * 3
print(laugh) # ははは
![]()
【Hiroki】
おもしろいですね!掛け算で文字が増えるのは直感的でわかりやすいです。
これなら、装飾用の記号をたくさん並べたい時とかに便利そうです。
![]()
【Yuki】
ええ、そうですね。
ただ、文字列と数値をそのまま「+」で繋げようとするとエラーになってしまうので、そこだけは注意が必要かもしれません……。
インデックスとスライス:文字を取り出す魔法
![]()
【Yuki】
次に、文字列の中から特定の文字を取り出す方法についてお話ししますね。
Pythonの文字列は、文字が順番に並んだ「シーケンス」というデータの集まりなんです。
それぞれの文字には、左から順に 0, 1, 2... と番号が振られています。これをインデックスと呼びます。
![]()
【Hiroki】
0から始まるんですね。1からじゃないのがプログラミングらしいというか、少し慣れが必要そうです。
![]()
【Yuki】
ふふ、そうですね。最初は少し戸惑うかもしれませんが、すぐに慣れると思います……。
また、右端から数える「マイナスのインデックス」というのもあって、一番最後の文字は -1 で指定できるんですよ。
word = "Python"
print(word[0]) # P
print(word[-1]) # n
さらに便利なのがスライスという機能です。
[開始:終了] と書くことで、文字列の一部を切り取ることができます。
print(word[0:2]) # Py (0番目から2番目の手前まで)
print(word[2:]) # thon (2番目から最後まで)
![]()
【Hiroki】
スライスは強力ですね!
わざわざループを回したりしなくても、欲しい部分だけサッと取り出せるのは助かります。
![]()
【Yuki】
ええ。……実は、わたしはWebデザインを考えるのも好きなんですけど、長いタイトルの一部だけを表示して、あとは「...」で省略したい時なんかに、このスライスがとても役に立つんですよ。
文字列の長さを取得する len() 関数と組み合わせると、もっと表現の幅が広がるはずです。
文字列は「不変」な存在
![]()
【Yuki】
ここで、ひとつ大切なルールを覚えておいてほしいんです。
Pythonの文字列はイミュータブル(不変)という性質を持っています。
一度作った文字列の中身を、後から直接書き換えることはできないんです……。
![]()
【Hiroki】
えっ、そうなんですか?
例えば word[0] = "J" みたいにして、"Python" を "Jython" に変えることはできないってことですか?
![]()
【Yuki】
はい、それを実行するとエラーになってしまいます……。
もし変えたい場合は、新しく文字列を作り直して、変数に代入し直す必要があるんです。
word = "Python"
word = "J" + word[1:]
print(word) # Jython
少し不便に感じるかもしれませんが、これによってデータの安全性が保たれている部分もあるんですよ。
便利な文字列メソッド
![]()
【Hiroki】
書き換えられないのは意外でした。でも、新しい変数に入れればいいだけなら、工夫次第でどうにでもなりそうですね。
他にも、文字列を便利に扱うための機能ってありますか?
![]()
【Yuki】
たくさんありますよ。文字列には「メソッド」と呼ばれる、便利な専用機能が備わっています。
よく使うものをいくつか紹介しますね。
upper()/lower(): 大文字・小文字に変換します。replace(古い文字, 新しい文字): 文字を置換します。strip(): 前後の余計な空白を取り除きます。split(区切り文字): 文字列を分割してリストにします。
text = " Python Programming "
print(text.strip().upper()) # PYTHON PROGRAMMING
print(text.replace("Python", "Java")) # Java Programming
![]()
【Hiroki】
strip() は入力フォームの処理とかでよく見かけそうです。
ユーザーがうっかりスペースを入れてしまっても、これなら安心ですね。
![]()
【Yuki】
そうですね。特にWeb制作の現場では、フォントの表示を綺麗に保つためにも、こうしたデータのクレンジングは欠かせない工程なんです。
わたし……実はフォントへのこだわりが結構強くて。
せっかくの文字列も、表示されるフォントが少しズレていたり、意図しない空白があったりすると、気になって夜も眠れなくなってしまうことがあって……あ、もちろん夜行性なので起きてはいるんですけど。
![]()
【Hiroki】
Yukiさんのこだわり、伝わってきます(笑)。
データの見た目を整えるのも、プログラミングの大事な役割なんですね。
f-strings(フォーマット済み文字列リテラル)
![]()
【Yuki】
最後に、今のPythonで最も推奨されている文字列の組み立て方、f-stringsについて教えますね。
これを使うと、文字列の中に変数の値をとても自然に埋め込むことができるんです。
![]()
【Hiroki】
今までは + で繋いでいましたけど、もっと楽な方法があるんですか?
![]()
【Yuki】
はい。文字列の前に f または F を付けて、埋め込みたい変数を波括弧 {} で囲むだけです。
name = "Hiroki"
score = 95
print(f"こんにちは、{name}くん。今回のテストは{score}点でしたね。")
これなら、型を気にして str() で変換したりする手間も省けますし、コードも読みやすくなります。
数値の桁数を指定したり、日付のフォーマットを整えたりすることもできる、とても多機能な書き方なんです。
![]()
【Hiroki】
これはすごい!さっき言っていた「数値との結合エラー」も、これなら気にしなくていいんですね。
これから文字列を組み立てる時は、積極的に使っていこうと思います。
![]()
【Yuki】
ぜひ、活用してみてください……。
文字列を自由に扱えるようになると、プログラムがぐっと人間味のあるものに変わっていくはずです。
誰かの役に立つために書かれた小さなスクリプトでも、丁寧なメッセージが表示されるだけで、そのツールに「心」が宿ったような気がしませんか……?
![]()
【Hiroki】
そうですね。ただのデータの羅列じゃなくて、ちゃんとコミュニケーションを取っている感じがします。
今日はありがとうございました、Yuki先生!文字列のこと、かなり深く理解できた気がします。
![]()
【Yuki】
お役に立てたなら嬉しいです。
一度に全部覚えようとしなくても大丈夫ですよ。
何か困ったことがあれば、いつでも聞いてくださいね。……わたしも、のんびりとお手伝いさせていただきますから。
参考資料
「文字列」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。


