では Python の文字列(str)をプログラミング初心者向けにやさしく、例題つきで詳しく説明します。実際に手を動かして試せるように、短いコード例と練習問題(答え付き)を用意しました。コピーしてそのまま Python(REPL / スクリプト / Jupyter)で試してください。
1. 文字列って何?
文字列(string)は「文字が並んだデータ」です。単語、文章、名前、記号などすべて文字列に入ります。Python では "(ダブルクォート)か '(シングルクォート)で囲みます。
a = "Hello"
b = 'こんにちは'
print(a, b)
PythonどちらのクォートでもOK。内側に同じ種類のクォートを使いたいときは別の方を使うか、エスケープします。
s1 = "She said, 'Hello!'" # シングルを内包
s2 = 'He said, "Hi!"' # ダブルを内包
s3 = "I said \"Hello\"" # バックスラッシュでエスケープ
Python2. 複数行の文字列(トリプルクォート)
長い文章や改行を含む文字列は ''' または """ を使います。
long = """これは
複数行の
文字列です"""
print(long)
Python3. 文字列の連結(つなげる)
+ でつなげられます。ただし数値とは直接つなげられないので注意(後で変換します)。
first = "山田"
last = "太郎"
full = first + " " + last
print(full) # 山田 太郎
Python4. 文字列の繰り返し
* を使うと繰り返しができます。
"ha" * 3 # => "hahaha"
Python5. 長さ(文字数)
len() で文字数を返します(日本語も 1 文字として数えます)。
len("こんにちは") # => 5
Python6. インデックス(位置指定)とスライス(部分取り出し)
文字列は文字の順序(0 から始まるインデックス)で扱えます。
s = "Python"
s[0] # 'P'
s[1:4] # 'yth' -> 開始インデックスは含み、終了インデックスは含まない
s[-1] # 'n' -> 末尾の文字
Pythonよく使うパターン:
s[:3]→ 先頭から 3 文字(0,1,2)s[3:]→ 4 文字目(インデックス3)から最後までs[:]→ コピー
7. 代表的な文字列メソッド(すぐ使えて便利なもの)
以下はよく使うメソッドです。どれも s.method() で呼びます。
s.lower():小文字にするs.upper():大文字にするs.strip():前後の空白(スペース・改行)を取り除くs.split(sep=None):区切り文字で分割してリストを返す(デフォルトは空白)sep.join(list):リストの要素をsepでつなげて文字列にするs.replace(old, new):old を new に置き換えるs.find(sub):部分文字列が最初に出てくる位置(見つからなければ -1)s.count(sub):部分文字列が何回出るかs.startswith(prefix) / s.endswith(suffix):接頭・接尾の判定
例:
s = " Hello, World! "
print(s.strip()) # "Hello, World!"
print(s.upper()) # " HELLO, WORLD! "
print(s.replace("World", "Python")) # " Hello, Python! "
print("a,b,c".split(",")) # ['a','b','c']
print(",".join(['x','y'])) # "x,y"
Python8. 文字列フォーマット(変数や値を文字列に埋め込む)
- 古い方法:
%(あまり推奨されないが覚えておいても良い) str.format():柔軟に書ける- f-strings(Python 3.6+ 推奨):シンプルで見やすい
例(f-string):
name = "Alice"
age = 30
print(f"{name}さんは{age}歳です") # Aliceさんは30歳です
Pythonstr.format() の例:
"{}さんは{}歳です".format(name, age)
"{name}さんは{age}歳です".format(name=name, age=age)
Python9. 文字列と数値の変換
文字列と数値は別世界。str() で数値→文字列、int() / float() で文字列→数値(ただし文字列が数値表現であることが必要)。
n = 123
print("値は " + str(n)) # OK
s = "456"
num = int(s) # 456 (int)
f = float("3.14") # 3.14 (float)
Python間違いやすい例(エラーになります):
"abc" + 123 # TypeError: can only concatenate str (not "int") to str
int("abc") # ValueError: invalid literal for int()
Python10. エスケープシーケンス(特殊文字)
\n(改行)、\t(タブ)など。文字列中で特殊な意味を持たせたいときに使います。
print("行1\n行2")
print("項目\t値")
Pythonバックスラッシュをそのまま使いたい時は \\ または生の文字列 r"..." を使います(パスなどに便利)。
print(r"C:\Users\Name") # バックスラッシュをエスケープせずに表示
Python11. よくある「つまずき」ポイントと対処法
- 数値と文字列を混同してエラー:
str()/int()を使う。 - インデックスの範囲エラー(
s[100]のように存在しない位置を指定):範囲を確認するかlen()を使う。 - 日本語の扱い(エンコーディング):通常は Python 3 なら問題なし。ファイル入出力のときは
encoding="utf-8"を指定すると安全。
12. 実践例(小さなスクリプト)
例1:ユーザーから名前を入力して挨拶。
name = input("名前を入力してください: ")
print(f"こんにちは、{name}さん!")
Python例2:CSV 行(カンマ区切り)を分解して処理する。
row = "1001,山田太郎,28,python"
cols = row.split(",")
id_, name, age, skill = cols
print(name, "は", age, "歳で、スキルは", skill)
Python13. 練習問題(自分でやってみよう)
各問の下に答えを書いていますが、まず自分で解いてから確認してください。
Q1. 文字列 "Hello" を 3 回繰り返して表示してください。
答え例:
print("Hello" * 3) # HelloHelloHello
PythonQ2. first = "田中", last = "花子" を使って "田中 花子さん、ようこそ!" と出力してください(間にスペースを入れる)。
答え例:
first = "田中"
last = "花子"
print(first + " " + last + "さん、ようこそ!")
# または
print(f"{first} {last}さん、ようこそ!")
PythonQ3. ユーザーに年齢を尋ねて、入力された文字列を整数に変換して 1 年後の年齢を表示するプログラムを書いてください。
答え例:
s = input("年齢を入力してください: ")
age = int(s)
print(f"来年は{age + 1}歳になります")
PythonQ4. 与えられた文字列 s = " apple, banana , cherry " をカンマで分割し、要素ごとに前後の空白を取り除いて(strip())、リストとして出力するコードを書いてください。
答え例:
s = " apple, banana , cherry "
items = [x.strip() for x in s.split(",")]
print(items) # ['apple','banana','cherry']
PythonQ5.(少し応用) text = "cat,dog,cat,bird" に対して、各動物の出現回数を辞書で数える(count を使わない方法)コードを書いてください。
答え例:
text = "cat,dog,cat,bird"
items = text.split(",")
counts = {}
for item in items:
counts[item] = counts.get(item, 0) + 1
print(counts) # {'cat':2, 'dog':1, 'bird':1}
Python14. ちょっと便利なコツ
- 複雑な文字列操作は小さく分けて(
split()で分解 → 各要素をstrip()→ 必要ならjoin())処理するとわかりやすい。 - 正規表現(
reモジュール)は強力だが最初はsplit/replace/findで十分。必要になったら学ぶ。 - 文字列は不変(immutable)です。
s[0] = "x"のような書き換えはできない。変更は新しい文字列を作ります(例:s = "x" + s[1:])。

