1. はじめに
本記事では Python|文字列がすべて大文字か判定する:isupper() の使い方を、初心者にも分かりやすく丁寧に解説します。
学べること:
– str.isupper()
の基本的な動作と戻り値の意味。
– よくある使い方(入力チェックや正規化、判定の組み合わせ)。
– 初心者がつまずきやすいポイントとその対処法。
実際のコード例と実行結果を交えて理解を深めましょう。
2. Python の基本解説:isupper() の概念と用途
2.1 isupper() の基本ルール
str.isupper()
は文字列が「大文字で構成されているか」を判定する組み込みメソッドです。戻り値はブール値(True
/ False
)です。重要な点を整理します:
- 英字などの「大文字・小文字を持つ文字(cased characters)」が少なくとも1文字含まれていて、かつそのすべてが大文字であれば
True
を返します。 - 数字や記号、スペースは判定の対象外(無視)です。これらだけで構成されている文字列は
False
を返します。 - 空文字列(
""
)はFalse
を返します。 - Unicode の大文字・小文字規則に従います。つまりラテン文字以外でも「大文字/小文字」を持つ文字に対して適切に判定されます。
2.2 簡単なコード例(出力結果付き)
まずは基本動作を試します。
# 基本例:英字のみ
s1 = "HELLO"
print(s1.isupper()) # True
# 小文字混在
s2 = "Hello"
print(s2.isupper()) # False
# 記号や数字を含むが英字は大文字
s3 = "ABC-123!"
print(s3.isupper()) # True
# 英字を含まない(数字のみ)
s4 = "1234"
print(s4.isupper()) # False
# 空文字
s5 = ""
print(s5.isupper()) # False
実行結果:
True
False
True
False
False
3. よくある使い方・応用例
3.1 入力チェック(例:特定フィールドが大文字か)
フォームやCSVなど外部データで「すべて大文字で入力されているか」をチェックしたいときに使います。例えば、商品コードが大文字で来るべき場合などです。
# 商品コードが大文字であるか確認するサンプル
def validate_product_code(code: str) -> bool:
# 先頭/末尾の空白を除去して判定
code = code.strip()
return code.isupper()
print(validate_product_code(" ABC-01 ")) # True(中の英字部分が大文字)
print(validate_product_code("abc-01")) # False(英字が小文字)
実行結果:
True
False
3.2 「大文字のみ」判定と別条件を組み合わせる
単に isupper()
だけでは「英字が1文字も無い」場合に False
になることを忘れないでください。英字が存在するかどうかを明示的に確認すると堅牢です。
# 英字が存在することも確認する例
def is_strictly_upper(s: str) -> bool:
has_cased = any(ch.isalpha() for ch in s) # 英字が少なくとも1つあるか
return has_cased and s.isupper()
print(is_strictly_upper("ABC123")) # True
print(is_strictly_upper("1234")) # False (英字がない)
print(is_strictly_upper("ABCあいう")) # True(英字は大文字、ひらがなは判定対象外)
実行結果:
True
False
True
3.3 応用例:チャットの「大文字=叫び」判定(簡易フィルタ)
チャットのメッセージが「大文字ばかり(いわゆる大声)か」をざっくり判定して扱いを変える、といった簡易的な運用にも使えます。ただし言語や絵文字・非ラテン文字の扱いに注意してください。
# 簡易的な「叫びチェック」
def is_shouting(msg: str) -> bool:
# メッセージに英字が一つ以上あり、それらが全て大文字なら叫びと判定
alpha_chars = [c for c in msg if c.isalpha()]
if not alpha_chars:
return False
return all(c.isupper() for c in alpha_chars)
print(is_shouting("THIS IS BAD!")) # True
print(is_shouting("これは大声です")) # False(英字がない)
print(is_shouting("THIS is BAD")) # False(小文字が混ざる)
実行結果:
True
False
False
4. 注意点・エラー対策
4.1 よくあるつまずきポイント
- 英字が1文字もないと
False
:記号や数字だけだとFalse
になります。必要に応じて英字の存在確認を行ってください。 - 空文字は
False
:空の文字列はisupper()
がFalse
を返します。 - Unicode の扱い:日本語(ひらがな・カタカナ・漢字)は「大文字/小文字」の概念がないため判定対象になりません。ラテン以外のスクリプトでも大文字小文字を持つものは正しく判定されます。
- 全角英字に注意:全角の英字(ABC)に対しては通常のラテン大文字と異なる扱いになる場合があるため、正規化(
unicodedata.normalize()
)を検討しましょう。
4.2 実務での対処例
CSV のデータクリーニングやログ解析で確実に判定したい場合は、以下のような手順を推奨します:
- 前後の空白を
.strip()
で除去する。 - 必要なら Unicode 正規化を行う(全角⇄半角の統一など)。
- 英字の有無を
any(c.isalpha() for c in s)
で確認してからisupper()
を評価する。
# 実務向け:正規化して判定する例
import unicodedata
def normalize_and_check_upper(s: str) -> bool:
# Unicode 正規化(NFKC)で全角英数を半角にすることが多い
s_norm = unicodedata.normalize("NFKC", s).strip()
has_alpha = any(ch.isalpha() for ch in s_norm)
return has_alpha and s_norm.isupper()
print(normalize_and_check_upper("ABC-123")) # True (全角を正規化すれば大文字判定可能)
実行結果:
True
5. まとめ
str.isupper()
は「文字列の中の大文字・小文字を持つ文字がすべて大文字か」を簡単にチェックできる便利なメソッドです。実務で使うときは以下を押さえておきましょう:
- 英字が1文字以上含まれていることを確認してから判定すると堅牢。
- 空文字、数字のみ、記号のみは
False
になる。 - Unicode 正規化(全角→半角など)が必要なケースがある。
- チャットの「叫び判定」など簡易フィルタにも使えるが、万能ではない。
学習のコツ:実際に手を動かして様々な文字列(英字のみ、記号混在、非ラテン文字)で試してみること。小さなテストコードを用意して挙動を観察すると理解が速く深まります。