Pythonで文字列の末尾を確認する際によく遭遇するエラーに`str.endswith()`メソッドに関するものがあります。このエラーの解決策と正しい使い方について解説します。

## エラーの例

以下のようなコードを実行すると、TypeError が発生することがあります:

text = "hello.txt"

if text.endswith([".txt", ".doc"]): # エラー発生!

print("ドキュメントファイルです")

エラーメッセージ:

TypeError: endswith first arg must be str or a tuple of str, not list

## 解決策

`endswith()`メソッドは、引数として文字列またはタプルを受け取ります。リストは使用できません。

### 正しい使い方 1: 単一の文字列を確認

text = "hello.txt"

if text.endswith(".txt"): # OK

print("テキストファイルです")

### 正しい使い方 2: 複数の文字列を確認

複数の末尾パターンを確認する場合は、タプルを使用します:

text = "hello.txt"

if text.endswith((".txt", ".doc")): # OK

print("ドキュメントファイルです")

## endswith()メソッドの基本構文

str.endswith(suffix[, start[, end]])

- suffix: 検索する末尾の文字列(文字列またはタプルで指定)
- start: 検索開始位置(オプション)
- end: 検索終了位置(オプション)

## 実践的な使用例

### ファイル拡張子の確認

filename = "document.pdf"

if filename.endswith((".pdf", ".doc", ".docx")):

print("ドキュメントファイルです")

### 検索範囲を指定した確認

text = "Hello World.txt"

インデックス0から5までの範囲で確認

if text.endswith("o", 0, 5): # "Hello"の末尾が"o"かを確認

print("oで終わります")

### 大文字小文字を区別しない確認

text = "Hello.TXT"

if text.lower().endswith(".txt"):

print("テキストファイルです")

## よくある間違い

1. リストを使用する

間違い

text.endswith([".txt", ".doc"]) # TypeError

正しい

text.endswith((".txt", ".doc"))

2. カンマを忘れる

間違い

text.endswith((".txt")) # 単一要素のタプルにはカンマが必要

正しい

text.endswith(".txt") # 文字列の場合はOK

text.endswith((".txt",)) # タプルの場合はカンマが必要

## まとめ

- `endswith()`は文字列またはタプルを引数として受け取る
- 複数のパターンを確認する場合は、タプルを使用する
- リストは使用できない
- 大文字小文字を区別する
- 検索範囲を指定することも可能

これらの点に注意して使用することで、`endswith()`メソッドを効果的に活用できます。