文字列型(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)
実行結果:
これは
複数行の
文字列です
文字列の基本操作
結合(連結)
Pythonfirst_name = "太郎" last_name = "山田" # + で結合 full_name = last_name + first_name print(full_name) # 山田太郎 # スペースを入れて結合 full_name_space = last_name + " " + first_name print(full_name_space) # 山田 太郎
繰り返し
Pythontext = "Hello" repeated = text * 3 print(repeated) # HelloHelloHello # 区切り文字と組み合わせ line = "=" * 20 print(line) # ====================
長さの取得
Pythontext = "こんにちは" length = len(text) print(length) # 5
len() 関数で文字列の長さ(文字数)を取得できます。
文字列のインデックスとスライス
インデックス(位置指定)
インデックスとは、文字列内の各文字が格納されている位置を示す番号です。インデックスを使うことで特定の文字にアクセスできます。
Pythontext = "Python" # 最初の文字(0から始まる) print(text[0]) # P # 2番目の文字 print(text[1]) # y # 最後の文字 print(text[-1]) # n # 後ろから2番目 print(text[-2]) # o
ポイント: インデックスは0から始まります。負の数で後ろから数えられます。
スライス(部分取得)
スライスを使うことで、連続した複数の文字を取り出すことができます。
Pythontext = "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() - 大文字・小文字変換
機能: 英字を大文字・小文字に変換します。
Pythontext = "Hello World" print(text.upper()) # HELLO WORLD(全て大文字) print(text.lower()) # hello world(全て小文字)
用途: メールアドレスやユーザー名の正規化、比較処理など
strip() - 空白の削除
機能: 文字列の両端(または片側)の空白を削除します。
Pythontext = " こんにちは " print(text.strip()) # "こんにちは"(両端の空白を削除) print(text.lstrip()) # "こんにちは "(左の空白を削除) print(text.rstrip()) # " こんにちは"(右の空白を削除)
用途: ユーザー入力の整形、ファイル読み込み時の不要な空白除去
replace() - 置換
機能: 文字列内の指定した部分を別の文字列に置き換えます。
Pythontext = "こんにちは、太郎さん" # "太郎" を "花子" に置き換え new_text = text.replace("太郎", "花子") print(new_text) # こんにちは、花子さん # 全ての出現箇所を置換 text = "りんごとりんごとりんご" result = text.replace("りんご", "みかん") print(result) # みかんとみかんとみかん
書き方: 文字列.replace(置換前, 置換後)
split() - 分割
機能: 文字列を指定した区切り文字で分割し、リストにします。
Pythontext = "りんご,みかん,バナナ" # カンマで分割 fruits = text.split(",") print(fruits) # ['りんご', 'みかん', 'バナナ'] # スペースで分割(デフォルト) sentence = "Hello World Python" words = sentence.split() print(words) # ['Hello', 'World', 'Python']
用途: CSVデータの処理、文章の単語分割
find() / in - 検索
機能: 文字列内に特定の文字列が含まれるか検索します。
Pythontext = "Pythonは楽しい" # "楽しい" の位置を検索(見つからない場合は-1) position = text.find("楽しい") print(position) # 6 # 存在チェック(in演算子) print("Python" in text) # True print("Java" in text) # False
使い分け:
find(): 位置を知りたい場合in: 存在だけ確認したい場合
文字列フォーマット
f-string(推奨)
Pythonname = "太郎" age = 25 # f-stringで変数を埋め込む message = f"{name}さんは{age}歳です" print(message) # 太郎さんは25歳です # 計算も可能 price = 1000 message = f"合計金額は{price * 1.1}円です" print(message) # 合計金額は1100.0円です
format()メソッド
Pythonname = "太郎" age = 25 message = "{}さんは{}歳です".format(name, age) print(message) # 太郎さんは25歳です
具体例
例1: ユーザー名の整形
Python# ユーザーが入力した名前(前後に空白がある) user_input = " 山田太郎 " # 空白を削除して整形 cleaned_name = user_input.strip() print(f"こんにちは、{cleaned_name}さん")
例2: メールアドレスのチェック
Pythonemail = "user@example.com" # @が含まれているか確認 if "@" in email: print("有効なメールアドレスです") else: print("@が含まれていません")
例3: CSVデータの処理
Pythondata = "太郎,25,東京都" # カンマで分割 parts = data.split(",") name = parts[0] age = parts[1] address = parts[2] print(f"名前: {name}") print(f"年齢: {age}") print(f"住所: {address}")
例4: パスワードの検証
Pythonpassword = "MyPassword123" # 8文字以上か確認 if len(password) >= 8: print("パスワードの長さはOKです") else: print("パスワードは8文字以上にしてください")
例5: テンプレートメッセージ
Pythonname = "田中" product = "ノートパソコン" price = 89800 message = f""" {name}様 ご注文ありがとうございます。 商品名: {product} 金額: {price}円 発送まで今しばらくお待ちください。 """ print(message)
例6: URLの生成
Pythonbase_url = "https://example.com/user/" user_id = "12345" # URLを結合 full_url = base_url + user_id print(full_url) # https://example.com/user/12345
よくある間違い
間違い1: 文字列のクォーテーション忘れ
Pythonname = 太郎 # NameError: name '太郎' is not defined
原因: 文字列はクォーテーションで囲む必要があります。
正しい書き方:
Pythonname = "太郎"
間違い2: インデックスの範囲外アクセス
Pythontext = "Hello" print(text[10]) # IndexError: string index out of range
原因: 存在しない位置を指定しています。
対策:
Pythontext = "Hello" if len(text) > 10: print(text[10]) else: print("文字列が短すぎます")
間違い3: 文字列の変更はできない
Pythontext = "Hello" text[0] = "h" # TypeError: 'str' object does not support item assignment
原因: 文字列は**変更不可(イミュータブル)**です。
正しい方法:
Pythontext = "Hello" text = "h" + text[1:] print(text) # hello
間違い4: 文字列と数値の結合
Pythonage = 25 message = "私は" + age + "歳です" # TypeError
原因: 文字列と数値は直接結合できません。
正しい方法:
Pythonage = 25 # 方法1: str()で文字列に変換 message = "私は" + str(age) + "歳です" # 方法2: f-stringを使う(推奨) message = f"私は{age}歳です"
間違い5: クォーテーションのネスト
Pythonmessage = "彼は"こんにちは"と言った" # SyntaxError
原因: ダブルクォートの中にダブルクォートを使っています。
正しい方法:
Python# 方法1: シングルとダブルを使い分ける message = '彼は"こんにちは"と言った' # 方法2: エスケープ文字を使う message = "彼は\"こんにちは\"と言った"
練習問題
問題1(基礎)⭐☆☆
名字と名前を別々の変数に保存し、フルネームを「姓 名」の形式で表示してください(間にスペースを入れる)。
💡 ヒント
+ で文字列を結合します。スペースも " " で文字列として扱います。
✅ 解答例
Pythonfirst_name = "太郎" last_name = "山田" full_name = last_name + " " + first_name print(full_name)
実行結果:
山田 太郎
解説:
" " は半角スペース1つ分の文字列です。+ 演算子で3つの文字列を結合しています。
問題2(基礎)⭐☆☆
「Python」という文字列から、最初の2文字「Py」を取り出して表示してください。
💡 ヒント
スライスを使います。文字列[0:2] で最初から2文字目まで取得できます。
✅ 解答例
Pythontext = "Python" result = text[0:2] print(result) # Py # または print(text[:2]) # Py
実行結果:
Py
解説:
text[0:2] は0番目から2番目の手前(1番目)までを取得します。開始位置を省略すると0から始まります。
問題3(応用)⭐⭐☆
メールアドレス「user@example.com」から、ユーザー名部分(@の前)とドメイン部分(@の後)を別々に取り出して表示してください。
💡 ヒント
split("@")で@を基準に分割- 分割した結果はリストになる
- リストの0番目がユーザー名、1番目がドメイン
✅ 解答例
Pythonemail = "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を使うと、変数を含む文字列を読みやすく作成できます。
- 文字列は変更不可の型であり、数値との連結時には型変換が必要です。
文字列型(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)
実行結果:
これは
複数行の
文字列です
文字列の基本操作
結合(連結)
Pythonfirst_name = "太郎" last_name = "山田" # + で結合 full_name = last_name + first_name print(full_name) # 山田太郎 # スペースを入れて結合 full_name_space = last_name + " " + first_name print(full_name_space) # 山田 太郎
繰り返し
Pythontext = "Hello" repeated = text * 3 print(repeated) # HelloHelloHello # 区切り文字と組み合わせ line = "=" * 20 print(line) # ====================
長さの取得
Pythontext = "こんにちは" length = len(text) print(length) # 5
len() 関数で文字列の長さ(文字数)を取得できます。
文字列のインデックスとスライス
インデックス(位置指定)
インデックスとは、文字列内の各文字が格納されている位置を示す番号です。インデックスを使うことで特定の文字にアクセスできます。
Pythontext = "Python" # 最初の文字(0から始まる) print(text[0]) # P # 2番目の文字 print(text[1]) # y # 最後の文字 print(text[-1]) # n # 後ろから2番目 print(text[-2]) # o
ポイント: インデックスは0から始まります。負の数で後ろから数えられます。
スライス(部分取得)
スライスを使うことで、連続した複数の文字を取り出すことができます。
Pythontext = "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() - 大文字・小文字変換
機能: 英字を大文字・小文字に変換します。
Pythontext = "Hello World" print(text.upper()) # HELLO WORLD(全て大文字) print(text.lower()) # hello world(全て小文字)
用途: メールアドレスやユーザー名の正規化、比較処理など
strip() - 空白の削除
機能: 文字列の両端(または片側)の空白を削除します。
Pythontext = " こんにちは " print(text.strip()) # "こんにちは"(両端の空白を削除) print(text.lstrip()) # "こんにちは "(左の空白を削除) print(text.rstrip()) # " こんにちは"(右の空白を削除)
用途: ユーザー入力の整形、ファイル読み込み時の不要な空白除去
replace() - 置換
機能: 文字列内の指定した部分を別の文字列に置き換えます。
Pythontext = "こんにちは、太郎さん" # "太郎" を "花子" に置き換え new_text = text.replace("太郎", "花子") print(new_text) # こんにちは、花子さん # 全ての出現箇所を置換 text = "りんごとりんごとりんご" result = text.replace("りんご", "みかん") print(result) # みかんとみかんとみかん
書き方: 文字列.replace(置換前, 置換後)
split() - 分割
機能: 文字列を指定した区切り文字で分割し、リストにします。
Pythontext = "りんご,みかん,バナナ" # カンマで分割 fruits = text.split(",") print(fruits) # ['りんご', 'みかん', 'バナナ'] # スペースで分割(デフォルト) sentence = "Hello World Python" words = sentence.split() print(words) # ['Hello', 'World', 'Python']
用途: CSVデータの処理、文章の単語分割
find() / in - 検索
機能: 文字列内に特定の文字列が含まれるか検索します。
Pythontext = "Pythonは楽しい" # "楽しい" の位置を検索(見つからない場合は-1) position = text.find("楽しい") print(position) # 6 # 存在チェック(in演算子) print("Python" in text) # True print("Java" in text) # False
使い分け:
find(): 位置を知りたい場合in: 存在だけ確認したい場合
文字列フォーマット
f-string(推奨)
Pythonname = "太郎" age = 25 # f-stringで変数を埋め込む message = f"{name}さんは{age}歳です" print(message) # 太郎さんは25歳です # 計算も可能 price = 1000 message = f"合計金額は{price * 1.1}円です" print(message) # 合計金額は1100.0円です
format()メソッド
Pythonname = "太郎" age = 25 message = "{}さんは{}歳です".format(name, age) print(message) # 太郎さんは25歳です
具体例
例1: ユーザー名の整形
Python# ユーザーが入力した名前(前後に空白がある) user_input = " 山田太郎 " # 空白を削除して整形 cleaned_name = user_input.strip() print(f"こんにちは、{cleaned_name}さん")
例2: メールアドレスのチェック
Pythonemail = "user@example.com" # @が含まれているか確認 if "@" in email: print("有効なメールアドレスです") else: print("@が含まれていません")
例3: CSVデータの処理
Pythondata = "太郎,25,東京都" # カンマで分割 parts = data.split(",") name = parts[0] age = parts[1] address = parts[2] print(f"名前: {name}") print(f"年齢: {age}") print(f"住所: {address}")
例4: パスワードの検証
Pythonpassword = "MyPassword123" # 8文字以上か確認 if len(password) >= 8: print("パスワードの長さはOKです") else: print("パスワードは8文字以上にしてください")
例5: テンプレートメッセージ
Pythonname = "田中" product = "ノートパソコン" price = 89800 message = f""" {name}様 ご注文ありがとうございます。 商品名: {product} 金額: {price}円 発送まで今しばらくお待ちください。 """ print(message)
例6: URLの生成
Pythonbase_url = "https://example.com/user/" user_id = "12345" # URLを結合 full_url = base_url + user_id print(full_url) # https://example.com/user/12345
よくある間違い
間違い1: 文字列のクォーテーション忘れ
Pythonname = 太郎 # NameError: name '太郎' is not defined
原因: 文字列はクォーテーションで囲む必要があります。
正しい書き方:
Pythonname = "太郎"
間違い2: インデックスの範囲外アクセス
Pythontext = "Hello" print(text[10]) # IndexError: string index out of range
原因: 存在しない位置を指定しています。
対策:
Pythontext = "Hello" if len(text) > 10: print(text[10]) else: print("文字列が短すぎます")
間違い3: 文字列の変更はできない
Pythontext = "Hello" text[0] = "h" # TypeError: 'str' object does not support item assignment
原因: 文字列は**変更不可(イミュータブル)**です。
正しい方法:
Pythontext = "Hello" text = "h" + text[1:] print(text) # hello
間違い4: 文字列と数値の結合
Pythonage = 25 message = "私は" + age + "歳です" # TypeError
原因: 文字列と数値は直接結合できません。
正しい方法:
Pythonage = 25 # 方法1: str()で文字列に変換 message = "私は" + str(age) + "歳です" # 方法2: f-stringを使う(推奨) message = f"私は{age}歳です"
間違い5: クォーテーションのネスト
Pythonmessage = "彼は"こんにちは"と言った" # SyntaxError
原因: ダブルクォートの中にダブルクォートを使っています。
正しい方法:
Python# 方法1: シングルとダブルを使い分ける message = '彼は"こんにちは"と言った' # 方法2: エスケープ文字を使う message = "彼は\"こんにちは\"と言った"
練習問題
問題1(基礎)⭐☆☆
名字と名前を別々の変数に保存し、フルネームを「姓 名」の形式で表示してください(間にスペースを入れる)。
💡 ヒント
+ で文字列を結合します。スペースも " " で文字列として扱います。
✅ 解答例
Pythonfirst_name = "太郎" last_name = "山田" full_name = last_name + " " + first_name print(full_name)
実行結果:
山田 太郎
解説:
" " は半角スペース1つ分の文字列です。+ 演算子で3つの文字列を結合しています。
問題2(基礎)⭐☆☆
「Python」という文字列から、最初の2文字「Py」を取り出して表示してください。
💡 ヒント
スライスを使います。文字列[0:2] で最初から2文字目まで取得できます。
✅ 解答例
Pythontext = "Python" result = text[0:2] print(result) # Py # または print(text[:2]) # Py
実行結果:
Py
解説:
text[0:2] は0番目から2番目の手前(1番目)までを取得します。開始位置を省略すると0から始まります。
問題3(応用)⭐⭐☆
メールアドレス「user@example.com」から、ユーザー名部分(@の前)とドメイン部分(@の後)を別々に取り出して表示してください。
💡 ヒント
split("@")で@を基準に分割- 分割した結果はリストになる
- リストの0番目がユーザー名、1番目がドメイン
✅ 解答例
Pythonemail = "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を使うと、変数を含む文字列を読みやすく作成できます。
- 文字列は変更不可の型であり、数値との連結時には型変換が必要です。