文字列の基礎概念
文字列(String)は、一連の文字で構成される順序付きデータ型であり、シングルクォーテーション(' ')またはダブルクォーテーション(" ")で囲んで定義されます。主な特徴は以下の通りです:
- アルファベット、数字、記号、空白などを含む任意の文字を扱える
- 不変性(Immutable):作成後、中の文字を直接編集できない
- インデックスアクセス、スライス、ループ走査などの操作が可能
文字列の基本操作
1. リストと類似する操作
1) インデックスによるアクセス(0から始まる)
文字列内の特定位置の文字にアクセスできます。正方向では0から始まり、逆方向では-1から始まります。
text = "hello"
print(text[0]) # 出力: h
print(text[-1]) # 出力: o
# text[5] など無効なインデックスはエラーになる
2) スライス操作([開始:終了])
指定した範囲の文字列を抽出します。終了インデックスは含まれません。
text = "python"
print(text[0:4]) # 出力: pyth
print(text[:3]) # 出力: pyt(開始省略時は0)
print(text[2:]) # 出力: thon(終了省略時は末尾)
3) forループによる全文字の走査
各文字を順番に取得して処理します。
text = "world"
for char in text:
print(char)
2. リストとの違い
- 文字列は不変:値の変更は不可。例:
text = "abc" text[0] = "x" # → TypeError: 'str' object does not support item assignment - リストは可変:要素の変更が可能。
lst = ['a', 'b'] lst[0] = 'x' print(lst) # 出力: ['x', 'b']
3. 実践例:チェス盤の表示
turtleモジュールを使用して、チェスの駒をテキスト形式で描画します。
import turtle
# 黒い駒と白い駒の定義
black_pieces = "♜♞♝♛♚♟"
white_pieces = "♖♘♗♕♔♙"
turtle.penup()
turtle.goto(0, 0)
# 1行目:黒い駒(先頭5つ)
for piece in black_pieces[:5]:
turtle.write(piece, font=('Arial', 40))
turtle.forward(40)
# 1行目:残りの駒(反転)
for idx in [2, 1, 0]:
turtle.write(black_pieces[idx], font=('Arial', 40))
turtle.forward(40)
# 2行目:兵(8個)
turtle.goto(0, -50)
for _ in range(8):
turtle.write(black_pieces[-1], font=('Arial', 40))
turtle.forward(40)
# 3行目:白い駒(先頭5つ)
turtle.goto(0, -100)
for piece in white_pieces[:5]:
turtle.write(piece, font=('Arial', 40))
turtle.forward(40)
# 3行目:残りの駒(反転)
for idx in [2, 1, 0]:
turtle.write(white_pieces[idx], font=('Arial', 40))
turtle.forward(40)
# 4行目:白い兵
turtle.goto(0, -150)
for _ in range(8):
turtle.write(white_pieces[-1], font=('Arial', 40))
turtle.forward(40)
turtle.done()
文字列のフォーマット方法
1. %形式(旧式)
プレースホルダを使って文字列を埋め込みます。
name = "さくら"
age = 20
print("こんにちは!私は%sさんで、今年%d歳です。" % (name, age))
2. format()メソッド
位置引数や名前付き引数で置換が可能です。
template = "科目:{0}、時間:{1}"
print(template.format("数学", "14:00-16:00"))
# 引数の順序入れ替えも可能
print("時間:{1}、科目:{0}".format("英語", "15:00-17:00"))
3. f-strings(Python 3.6以降)
コードの読みやすさと実行速度が優れており、推奨される方法。
name = "寧寧"
age = 2
print(f"こんにちは!私は{name}、今年{age}歳です。")