メインコンテンツへスキップ
Lesson3 / 9

文字列型(str)の基本

目次

このレッスンで学ぶこと

  • 文字列とは何か、どう作るか
  • 文字列の基本的な操作方法
  • 便利な文字列メソッド
  • 文字列の結合とフォーマット

文字列型とは

文字列型は、文字を並べたデータを扱うための型です。

プログラムで扱うデータは、数値だけではありません。名前、メッセージ、住所など、文字で表現される情報も重要なデータです。これらを扱うのが文字列型です。

文字列の表現方法

Pythonでは、文字列を " " (ダブルクォーテーション)または ' ' (シングルクォーテーション)で囲んで表現します:

Python
# ダブルクォーテーション
name = "太郎"

# シングルクォーテーション
message = 'こんにちは'

# どちらも同じ文字列型
print(type(name))     # <class 'str'>
print(type(message))  # <class 'str'>

文字列の例

日常生活で使う様々な文字情報を文字列として扱えます:

Python
# 名前
name = "山田太郎"

# メールアドレス
email = "taro@example.com"

# メッセージ
greeting = "おはようございます"

# 住所
address = "東京都渋谷区"

💡 豆知識: 文字列は英語で「String(ストリング)」と言います。文字を糸(string)のようにつなげたものという意味です。


なぜ文字列型を理解する必要があるのか?

文字列型は、数値型と並んでプログラミングで最もよく使うデータ型の一つです。

文字列型を使う場面

  • ユーザー情報: 名前、メールアドレス、電話番号
  • メッセージ: エラーメッセージ、通知、挨拶文
  • テキストデータ: ファイル名、URLパス、設定値
  • 入出力: ユーザーからの入力、画面への出力

文字列と数値の違い

Python
# 文字列の "123"
text_number = "123"
print(text_number + "456")  # 123456(文字として連結)

# 数値の 123
real_number = 123
print(real_number + 456)    # 579(数値として計算)

重要なポイント:

  • 文字列と数値は全く別のデータ型
  • 文字列の "1" と数値の 1 は異なる
  • 用途に応じて正しい型を選ぶことが重要

文字列の基本

文字列の作成

Python
# ダブルクォーテーション
name = "太郎"

# シングルクォーテーション
message = '

こんにちは'

# どちらも同じ意味
print(name)     # 太郎
print(message)  # こんにちは

複数行の文字列

Python
# トリプルクォート(3つのクォート)で囲むと改行を含められる
text = """これは
複数行の
文字列です"""

print(text)

実行結果:

これは
複数行の
文字列です

文字列の基本操作

結合(連結)

Python
first_name = "太郎"
last_name = "山田"

# + で結合
full_name = last_name + first_name
print(full_name)  # 山田太郎

# スペースを入れて結合
full_name_space = last_name + " " + first_name
print(full_name_space)  # 山田 太郎

繰り返し

Python
text = "Hello"
repeated = text * 3
print(repeated)  # HelloHelloHello

# 区切り文字と組み合わせ
line = "=" * 20
print(line)  # ====================

長さの取得

Python
text = "こんにちは"
length = len(text)
print(length)  # 5

len() 関数で文字列の長さ(文字数)を取得できます。


文字列のインデックスとスライス

インデックス(位置指定)

インデックスとは、文字列内の各文字が格納されている位置を示す番号です。インデックスを使うことで特定の文字にアクセスできます。

Python
text = "Python"

# 最初の文字(0から始まる)
print(text[0])  # P

# 2番目の文字
print(text[1])  # y

# 最後の文字
print(text[-1])  # n

# 後ろから2番目
print(text[-2])  # o

ポイント: インデックスは0から始まります。負の数で後ろから数えられます。


スライス(部分取得)

スライスを使うことで、連続した複数の文字を取り出すことができます。

Python
text = "Hello World"

# 最初の5文字
print(text[0:5])  # Hello

# 6文字目から最後まで
print(text[6:])   # World

# 最初から5文字目まで
print(text[:5])   # Hello

# 後ろ5文字
print(text[-5:])  # World

書き方: 文字列[開始:終了](終了位置は含まれません)


便利な文字列メソッド

upper() / lower() - 大文字・小文字変換

機能: 英字を大文字・小文字に変換します。

Python
text = "Hello World"

print(text.upper())  # HELLO WORLD(全て大文字)
print(text.lower())  # hello world(全て小文字)

用途: メールアドレスやユーザー名の正規化、比較処理など


strip() - 空白の削除

機能: 文字列の両端(または片側)の空白を削除します。

Python
text = "  こんにちは  "

print(text.strip())   # "こんにちは"(両端の空白を削除)
print(text.lstrip())  # "こんにちは  "(左の空白を削除)
print(text.rstrip())  # "  こんにちは"(右の空白を削除)

用途: ユーザー入力の整形、ファイル読み込み時の不要な空白除去


replace() - 置換

機能: 文字列内の指定した部分を別の文字列に置き換えます。

Python
text = "こんにちは、太郎さん"

# "太郎" を "花子" に置き換え
new_text = text.replace("太郎", "花子")
print(new_text)  # こんにちは、花子さん

# 全ての出現箇所を置換
text = "りんごとりんごとりんご"
result = text.replace("りんご", "みかん")
print(result)  # みかんとみかんとみかん

書き方: 文字列.replace(置換前, 置換後)


split() - 分割

機能: 文字列を指定した区切り文字で分割し、リストにします。

Python
text = "りんご,みかん,バナナ"

# カンマで分割
fruits = text.split(",")
print(fruits)  # ['りんご', 'みかん', 'バナナ']

# スペースで分割(デフォルト)
sentence = "Hello World Python"
words = sentence.split()
print(words)  # ['Hello', 'World', 'Python']

用途: CSVデータの処理、文章の単語分割


find() / in - 検索

機能: 文字列内に特定の文字列が含まれるか検索します。

Python
text = "Pythonは楽しい"

# "楽しい" の位置を検索(見つからない場合は-1)
position = text.find("楽しい")
print(position)  # 6

# 存在チェック(in演算子)
print("Python" in text)  # True
print("Java" in text)    # False

使い分け:

  • find(): 位置を知りたい場合
  • in: 存在だけ確認したい場合

文字列フォーマット

f-string(推奨)

Python
name = "太郎"
age = 25

# f-stringで変数を埋め込む
message = f"{name}さんは{age}歳です"
print(message)  # 太郎さんは25歳です

# 計算も可能
price = 1000
message = f"合計金額は{price * 1.1}円です"
print(message)  # 合計金額は1100.0円です

format()メソッド

Python
name = "太郎"
age = 25

message = "{}さんは{}歳です".format(name, age)
print(message)  # 太郎さんは25歳です

具体例

例1: ユーザー名の整形

Python
# ユーザーが入力した名前(前後に空白がある)
user_input = "  山田太郎  "

# 空白を削除して整形
cleaned_name = user_input.strip()
print(f"こんにちは、{cleaned_name}さん")

例2: メールアドレスのチェック

Python
email = "user@example.com"

# @が含まれているか確認
if "@" in email:
    print("有効なメールアドレスです")
else:
    print("@が含まれていません")

例3: CSVデータの処理

Python
data = "太郎,25,東京都"

# カンマで分割
parts = data.split(",")

name = parts[0]
age = parts[1]
address = parts[2]

print(f"名前: {name}")
print(f"年齢: {age}")
print(f"住所: {address}")

例4: パスワードの検証

Python
password = "MyPassword123"

# 8文字以上か確認
if len(password) >= 8:
    print("パスワードの長さはOKです")
else:
    print("パスワードは8文字以上にしてください")

例5: テンプレートメッセージ

Python
name = "田中"
product = "ノートパソコン"
price = 89800

message = f"""
{name}
ご注文ありがとうございます。

商品名: {product}
金額: {price}
発送まで今しばらくお待ちください。
"""

print(message)

例6: URLの生成

Python
base_url = "https://example.com/user/"
user_id = "12345"

# URLを結合
full_url = base_url + user_id
print(full_url)  # https://example.com/user/12345

よくある間違い

間違い1: 文字列のクォーテーション忘れ

Python
name = 太郎  # NameError: name '太郎' is not defined

原因: 文字列はクォーテーションで囲む必要があります。

正しい書き方:

Python
name = "太郎"

間違い2: インデックスの範囲外アクセス

Python
text = "Hello"
print(text[10])  # IndexError: string index out of range

原因: 存在しない位置を指定しています。

対策:

Python
text = "Hello"
if len(text) > 10:
    print(text[10])
else:
    print("文字列が短すぎます")

間違い3: 文字列の変更はできない

Python
text = "Hello"
text[0] = "h"  # TypeError: 'str' object does not support item assignment

原因: 文字列は**変更不可(イミュータブル)**です。

正しい方法:

Python
text = "Hello"
text = "h" + text[1:]
print(text)  # hello

間違い4: 文字列と数値の結合

Python
age = 25
message = "私は" + age + "歳です"  # TypeError

原因: 文字列と数値は直接結合できません。

正しい方法:

Python
age = 25

# 方法1: str()で文字列に変換
message = "私は" + str(age) + "歳です"

# 方法2: f-stringを使う(推奨)
message = f"私は{age}歳です"

間違い5: クォーテーションのネスト

Python
message = "彼は"こんにちは"と言った"  # SyntaxError

原因: ダブルクォートの中にダブルクォートを使っています。

正しい方法:

Python
# 方法1: シングルとダブルを使い分ける
message = '彼は"こんにちは"と言った'

# 方法2: エスケープ文字を使う
message = "彼は\"こんにちは\"と言った"

練習問題

問題1(基礎)⭐☆☆

名字と名前を別々の変数に保存し、フルネームを「姓 名」の形式で表示してください(間にスペースを入れる)。

💡 ヒント

+ で文字列を結合します。スペースも " " で文字列として扱います。

✅ 解答例
Python
first_name = "太郎"
last_name = "山田"

full_name = last_name + " " + first_name
print(full_name)

実行結果:

山田 太郎

解説: " " は半角スペース1つ分の文字列です。+ 演算子で3つの文字列を結合しています。


問題2(基礎)⭐☆☆

「Python」という文字列から、最初の2文字「Py」を取り出して表示してください。

💡 ヒント

スライスを使います。文字列[0:2] で最初から2文字目まで取得できます。

✅ 解答例
Python
text = "Python"
result = text[0:2]
print(result)  # Py

# または
print(text[:2])  # Py

実行結果:

Py

解説: text[0:2] は0番目から2番目の手前(1番目)までを取得します。開始位置を省略すると0から始まります。


問題3(応用)⭐⭐☆

メールアドレス「user@example.com」から、ユーザー名部分(@の前)とドメイン部分(@の後)を別々に取り出して表示してください。

💡 ヒント
  1. split("@") で@を基準に分割
  2. 分割した結果はリストになる
  3. リストの0番目がユーザー名、1番目がドメイン
✅ 解答例
Python
email = "user@example.com"

# @で分割
parts = email.split("@")

username = parts[0]
domain = parts[1]

print(f"ユーザー名: {username}")
print(f"ドメイン: {domain}")

実行結果:

ユーザー名: user
ドメイン: example.com

解説: split() メソッドは文字列を指定した区切り文字で分割し、リストとして返します。リストの各要素にインデックスでアクセスできます。


まとめ

このレッスンでは、文字列の扱い方と操作メソッドを学びました。

  • 文字列は " " または ' ' で表現し、+* で結合・繰り返しができます。
  • インデックスとスライスを使うことで、必要な文字や部分文字列を取り出せます。
  • upper(), lower(), strip(), replace(), split() などのメソッドで加工ができます。
  • f-stringを使うと、変数を含む文字列を読みやすく作成できます。
  • 文字列は変更不可の型であり、数値との連結時には型変換が必要です。