文字列を連結する
このレッスンで分かること
- 文字列の連結は
+演算子で行います、"Hello" + " " + "World"で"Hello World"ができます- 文字列と数値を
+でつなぐとTypeError、数値側をstr(値)で変換する必要があります- 最小例は
def concat(first, last): return first + " " + last
文字列を連結する とは
- 演算子で文字列を組み立てる感覚を、関数の引数と戻り値を通して身につけよう。本レッスンでは、文字列を連結する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
文字列同士をくっつけて 1 つにする
プログラムが扱うデータの中で、最も身近なものの 1 つが「文字列」です。Python の文字列は str 型と呼ばれ、"Hello" のようにダブルクオートまたはシングルクオートで囲んで表現します。このレッスンでは、2 つの文字列を + 演算子でつなぎ合わせる「文字列連結」を扱います。
文字列の連結は、最初の関数で「複数の引数を組み合わせて 1 つの戻り値を作る」感覚を養う絶好の練習です。
+ 演算子で文字列を連結する
Python では、数値の足し算と同じ記号 + で文字列を連結できます。"Hello" + " " + "World" は "Hello World" という新しい文字列を作ります。連結後の文字列は、新しいオブジェクトとして生成されるのがポイントで、元の "Hello" や "World" はそのまま残ります。
Python
first = "Hello"
second = "World"
result = first + " " + second
# result は "Hello World"半角スペースを 1 つ挟みたいときは、上のように " " を間に入れます。空文字 "" を挟んでも何も起きませんが、書式の意図を明示するためによく使われます。
文字列に文字列以外を
+でつなごうとするとTypeErrorになります。これはPythonの代表的な落とし穴です。
引数を使って関数を書く
このレッスンの課題は、first と last という 2 つの文字列を受け取り、半角スペースで連結して返す concat 関数を作ることです。def 関数名(引数1, 引数2): の形で引数を宣言できます。
Python
def concat(first, last):
return first + " " + last戻り値の型は str です。first と last のどちらかが文字列でなかったらどうなるか、という話は型ヒントの章で詳しく扱いますが、ここではテストが文字列のみ渡してくる前提で書けば大丈夫です。
動きを追ってみる
関数の中で + がどう作用するかをイメージしておきましょう。
図を箇条書きで言い換えると、次のとおりです。
- 入力は
first = "Hello"、" "(半角スペース)、last = "Python"の 3 つ +演算子で左から順に結合 (("Hello" + " ") + "Python")- 出力は新しい文字列
"Hello Python"(元のfirstlastは不変)
+ は左結合の演算子なので、(first + " ") + last と評価されると考えてもよいです。
よくある間違い
文字列連結で初学者がはまりやすいパターンは、次のとおりです。
- 文字列と数値を
+でつないでTypeError - 半角スペースを忘れて
"HelloWorld"が返る - 全角スペース
" "を入れてしまい、テストが失敗する - 連結結果を
returnし忘れてNoneが返る
例えば "年齢は " + 28 は TypeError です。数値を文字列にしてから連結するには str(28) で変換するか、後の章で出てくる f-string を使います。
Python
age = 28
message = "年齢は " + str(age) + " 歳"文字列と数値を混ぜたいときは、型を揃えてから連結。これは
Pythonの型システムが厳しめだからこその安全装置です。
もう 1 つ、+= という記号もあります。s = s + "abc" の短縮形で、s += "abc" と書けます。ループの中で文字列を組み立てるときに便利ですが、頻繁に連結する場合は後の章で出てくる "".join(リスト) の方が速い、という豆知識も覚えておくと将来役立ちます。
連結の手段はいくつかある
Python には文字列を組み合わせる手段が複数あります。状況に応じて使い分けると読みやすいコードになります。
| 書き方 | 例 | 向いている場面 |
|---|---|---|
+ 連結 | first + " " + last | 2〜3 個の短い文字列を素早く連結 |
f-string | f"{first} {last}" | 変数を埋め込んで書式を整える |
format | "{} {}".format(first, last) | 古いコードや一部のライブラリ向け |
"".join(...) | " ".join([first, last]) | リストや大量の要素を結合する |
本レッスンでは最も基本の + を使いますが、将来 f-string や join が出てきても「同じ目的を別の手段で書いているだけ」と理解しておけば混乱しません。
ここまでの要点
文字列は + で連結。+ の結果は新しい文字列で、元の値は変わらない。数値を混ぜたいときは str(...) で変換、空文字や全角スペースの混入に注意。
やってみよう
課題はシンプルで、concat("Hello", "Python") が "Hello Python" を返すような関数を書くことです。手順は次のとおりです。
def concat(first, last):で関数を定義するfirst + " " + lastの値をreturnする- 「実行」ボタンでテストを走らせ、全部緑になるか確認する
Python
def concat(first, last):
return first + " " + last余裕があったら、def concat(first, last, sep=" "): のように区切り文字をデフォルト引数で受け取る形に拡張してみると、関数の柔軟性を増す練習になります。return first + sep + last と書くだけで、concat("a", "b", sep="-") のような呼び出しに対応できます。
おまけ — 文字列はイミュータブル
Python の文字列は イミュータブル (不変) と呼ばれる性質を持っていて、一度作った文字列の中身を書き換えることはできません。s = "abc" としたあとに s[0] = "x" と書くと TypeError になります。連結や置換を行うときは、毎回「新しい文字列」が生成されて、変数がそれを指し直す仕組みです。
文字列の
+=は一見書き換えているように見えますが、内部では新しい文字列を作って再代入しています。
この性質のおかげで、関数に文字列を渡しても元の値が壊される心配がない、というメリットがあります。concat(first, last) の中で first + " " + last を計算しても、呼び出し元の first 変数は影響を受けません。安全に値を渡せるのが、Python の文字列を扱いやすくしている理由の 1 つです。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は 四則演算で計算する で、+ 演算子で文字列を組み立てる感覚を、関数の引数と戻り値を通して身につけよう を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 文字列を連結 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 文字列を連結 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- 関数名は concat、引数は first と last の 2 つ
- 半角スペース 1 つを挟んで連結する
- 結果を return で返す
入出力例
test-cases.txt
concat("Hello", "Python") → "Hello Python"
concat("こんにちは", "世界") → "こんにちは 世界"
concat("abc", "") → "abc "