Python | 文字列を比較する

Python
スポンサーリンク

文字列の比較を初心者向けにやさしく解説

文字列の比較は、プログラムで「同じかどうか」「辞書順で前か後か」を判断するときによく使います。ここでは仕組みをやさしく説明し、たくさんの例と演習(答え付き)で身につけられるようにします。


1) 基本ルール — まずはこれだけ覚えよう

  • ==完全に同じ文字列かを調べる(等しいか)。
    例: "apple" == "apple"True"Apple" == "apple"False(大文字と小文字は区別される)
  • !=:等しくないか(== の逆)。
  • <, >, <=, >=辞書順(辞書で単語を並べる順)に比べる。プログラムでは「文字列を左から1文字ずつ比べて決める」方法で比較します(これを 辞書式比較(lexicographic comparison) と言います)。

2) 「辞書順」はどう決まるの?

文字列比較は 左から1文字ずつ見ていき、最初に違う文字が出てきた時にその文字の大小を見て判断します。たとえば:

  • "abc" < "bcd"
    → 先頭文字 ab を比べる → 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()
Python

4) 数字の文字列と数値は別物

"123" は文字列。数値 123 とは別物で、直接比較すると型が違うのでエラー(TypeError)になります。
もし数として比較したければ数に変換しましょう:

int("123") < 200   # True
Python

5) 日本語やUnicode文字の比較

日本語(漢字・ひらがな・カタカナ)や特殊記号も文字ごとに内部コードがあるので比較できますが、人間の期待どおりの順番になるとは限りません。言語や文化ごとの順序(辞書順)に沿って比較したいときは専門のライブラリ/関数(例:localePyICU 等)を使う必要がある場合があります(上級トピック)。


6) よくある使い方(if 文での比較)

name = input("名前を入力:")

if name == "Alice":
    print("こんにちは、Aliceさん!")
elif name.lower() == "bob":
    print("こんにちは、Bobさん(大小文字は無視)")
else:
    print("はじめまして")
Python

7) 実際に手を動かして理解する — 例題(コードと出力)

例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(小文字化して比べる)
Python

8) 初心者向けの注意点(まとめ)

  • 「等しいか」を調べるなら ==
  • 「どちらが前か」を調べるなら < / > を使えるが、大文字小文字や数字の並びに注意
  • 数値として比較したい数字の文字列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() で小文字に統一してから比較)

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました