文字列の比較を初心者向けにやさしく解説
文字列の比較は、プログラムで「同じかどうか」「辞書順で前か後か」を判断するときによく使います。ここでは仕組みをやさしく説明し、たくさんの例と演習(答え付き)で身につけられるようにします。
1) 基本ルール — まずはこれだけ覚えよう
==:完全に同じ文字列かを調べる(等しいか)。
例:"apple" == "apple"→True、"Apple" == "apple"→False(大文字と小文字は区別される)!=:等しくないか(==の逆)。<,>,<=,>=:辞書順(辞書で単語を並べる順)に比べる。プログラムでは「文字列を左から1文字ずつ比べて決める」方法で比較します(これを 辞書式比較(lexicographic comparison) と言います)。
2) 「辞書順」はどう決まるの?
文字列比較は 左から1文字ずつ見ていき、最初に違う文字が出てきた時にその文字の大小を見て判断します。たとえば:
"abc" < "bcd"
→ 先頭文字aとbを比べる →a < bなので全体でも<。"apple" < "apricot"
→a == a,p == p,p == rの段階でp < rだからapple < apricot。
文字自体の大小は、内部的には各文字に割り当てられた番号(ord() の値)で決まります。英数字や大文字小文字、記号にはそれぞれ番号があり、それが比較に使われます。
3) 大文字・小文字は区別される(重要)
Python は標準で 大文字と小文字を区別します。
例:
"Python" == "python" # False
"Z" < "a" # True (大文字の 'Z' のコードは小文字 'a' より小さい)
Python→ 「人が見た感覚」と違う場合があるので、区別したくないときは両方を小文字(または大文字)に揃えて比較します:
s1.lower() == s2.lower()
Python4) 数字の文字列と数値は別物
"123" は文字列。数値 123 とは別物で、直接比較すると型が違うのでエラー(TypeError)になります。
もし数として比較したければ数に変換しましょう:
int("123") < 200 # True
Python5) 日本語やUnicode文字の比較
日本語(漢字・ひらがな・カタカナ)や特殊記号も文字ごとに内部コードがあるので比較できますが、人間の期待どおりの順番になるとは限りません。言語や文化ごとの順序(辞書順)に沿って比較したいときは専門のライブラリ/関数(例:locale や PyICU 等)を使う必要がある場合があります(上級トピック)。
6) よくある使い方(if 文での比較)
name = input("名前を入力:")
if name == "Alice":
print("こんにちは、Aliceさん!")
elif name.lower() == "bob":
print("こんにちは、Bobさん(大小文字は無視)")
else:
print("はじめまして")
Python7) 実際に手を動かして理解する — 例題(コードと出力)
例1:
print("apple" == "apple") # True
print("apple" == "Apple") # False
Python例2:
print("123" < "9") # True, なぜなら '1' < '9' として比較されるから
print("2" < "10") # False, 文字列だと '2' と '1' を比較 -> '2' > '1'
Python例3(辞書式):
print("cat" < "catalog") # True, "cat" は "catalog" の先頭部分だから小さいと見なされる
print("cat" < "car") # False, 't' > 'r' だから
Python例4(大文字小文字):
print("Z" < "a") # True ('Z' のコードは 'a' のコードより小さい)
print("apple".lower() == "Apple".lower()) # True(小文字化して比べる)
Python8) 初心者向けの注意点(まとめ)
- 「等しいか」を調べるなら
==。 - 「どちらが前か」を調べるなら
</>を使えるが、大文字小文字や数字の並びに注意。 - 数値として比較したい数字の文字列は
int()/float()に変換する。 - 人間らしい(言語ルールに沿った)ソートが必要なら
locale等を調べる(上級)。
9) 練習問題
問題1(出力を予想):
print("apple" < "Apple")
Python問題2(出力を予想):
print("2" < "10")
Python問題3(コードを書いてください):ユーザー入力を受け取り、大文字・小文字を区別せずに "yes" と比較して True/False を出力するプログラムを1行で書いてください。
10) 練習問題の解答
問題1の答え:False
(理由:'a' のコードは 'A' のコードより大きい → 'a' > 'A')
問題2の答え:False
(文字列としては先頭文字 '2' と '1' を比べる → '2' > '1')
問題3の一行解答例:
print(input().strip().lower() == "yes")
Python(strip() は余分な空白除去、lower() で小文字に統一してから比較)
