Python:if文による文字列同士の比較

Python

Pythonのif文では、文字列同士の比較判定も簡単にできます。C言語などに比べると簡潔に記述できるPythonの文字列判定を詳しく解説します。

Python文字列の比較式一覧(主なもの)

Pythonの文字列同士の比較で利用する比較式の主なものをまとめました。

文字列の一致(==)と不一致(!=)の利用例

実行イメージ(一致した場合)

お名前は? 涼宮ハルヒ [Enter]
あなたが涼宮ハルヒさんだったのですか!

実行イメージ(一致しない場合)

お名前は? 古泉一樹 [Enter]
君に用はない。

ファイル名: 26_if_moji_true.py

# 文字列の一致を判定する
print("お名前は? ", end="")
name = input()

if name == "涼宮ハルヒ":
    print("あなたが{}さんだったのですか!".format(name))
else:
    print("君に用はない。")

解説

name == “涼宮ハルヒ” で、変数nameの内容が文字列「涼宮ハルヒ」と一致したら、という意味となる。上記スクリプトは、!=(文字列の不一致)を使うと以下のように記述できる。
26_if_moji_true.pyのif文とelse文の処理が入れ替わっただけで処理結果は全く同じである。

ファイル名:27_if_moji_false.py

# 文字列の不一致を判定する
print("お名前は? ", end="")
name = input()

if name != "涼宮ハルヒ":
    print("君に用はない。")
else:
    print("あなたが{}さんだったのですか!".format(name))

文字列を含む(in)と含まない(not in)の利用例

実行イメージ(特定の文字列を含む場合)

何をつぶやく? 目くそ鼻くそを笑う [Enter]
お客様のつぶやきにはセンシティブな内容が含まれています

実行イメージ(特定の文字列を含まない場合)

何をつぶやく? どんぐりの背比べ [Enter]
「どんぐりの背比べ」をつぶやきました

ファイル名:28_if_moji_in.py

# 文字列を含む場合を判定する
print("何をつぶやく? ", end="")
tweet = input()

if "くそ" in tweet:
    print("お客様のつぶやきにはセンシティブな内容が含まれています")
else:
    print("「{}」をつぶやきました".format(tweet))

解説

“くそ” in tweet で、変数tweetの中に文字列「くそ」が含まれていれば、という意味となる。上記スクリプトは、not in(文字列を含まない)を使うと以下のように記述できる。
28_if_moji_in.pyのif文とelse文の処理が入れ替わっただけで処理結果は全く同じである。

ファイル名:29_if_moji_notin.py

# 文字列を含まない場合を判定する
print("何をつぶやく? ", end="")
tweet = input()

if "くそ" not in tweet:
    print("「{}」をつぶやきました".format(tweet))
else:
    print("お客様のつぶやきにはセンシティブな内容が含まれています")

前方一致(startswith)の利用例

実行イメージ(前方一致する場合)

スマホ何使ってるの? iPhone6s [Enter]
iPhoneっていいの?

実行イメージ(前方一致しない場合)

スマホ何使ってるの? Samsung [Enter]
もしかしてAndroid?

ファイル名:30_if_startswith.py

# 文字列の前方一致を判定する
print("スマホ何使ってるの? ", end="")
sumaho = input()

if sumaho.startswith("iPhone"):
    print("iPhoneっていいの?")
else:
    print("もしかしてAndroid?")

解説

前方一致のstartswithメソッドは、

文字列変数.startswith("前方一致を判定する文字列")

のように使う。
上記のif文 sumaho.startswith(“iPhone“) は、変数sumahoの先頭文字列iPhone だったらという意味になる。sumahoの内容が「iPhone6s」だった場合、先頭文字列が一致することになる。

後方一致(endswith)の利用例

実行イメージ(後方一致する場合)

ここはどこだ? 市立図書館 [Enter]
どうりで本がいっぱいあるわけだ

実行イメージ(後方一致しない場合)

ここはどこだ? 文芸部室 [Enter]
わりと広いな

ファイル名:31_if_endswith.py

# 文字列の後方一致を判定する
print("ここはどこだ? ", end="")
doko = input()

if doko.endswith("図書館"):
    print("どうりで本がいっぱいあるわけだ")
else:
    print("わりと広いな")

解説

後方一致のendswithメソッドは、

文字列変数.endswith("後方一致を判定する文字列")

のように使う。
上記のif文 doko.endswith(“図書館“) は、変数dokoの最後の文字列図書館 だったらという意味になる。dokoの内容が「市立図書館」だった場合、最後の文字列が一致することになる。

Python文字列の辞書比較式一覧

実は、数値の比較同様に <, <= , >, >= なども存在するのですが、これは対象文字が辞書的に前か後かの比較となります。

要するに日本語だとあいうえお順、英語だとABC順に比較して前か後かといった判定という意味です。

辞書的に後方かどうか(>、>=)の利用例

実行イメージ(辞書的に後方である場合)

苗字をひらがなで入力してください: さとう [Enter]
「さとう」さん、佐々木さんの後にどうぞ。

実行イメージ(辞書的に後方でない場合)

苗字をひらがなで入力してください: さえき [Enter]
「さえき」さん、佐々木さんの前にどうぞ。

ファイル名:32_if_dic_ato.py

# 辞書的に後方
print("苗字をひらがなで入力してください: ", end="")
yomi = input()

if yomi > "ささき":
    print("佐々木さんの後にどうぞ")
else:
    print("佐々木さんの前にどうぞ")

解説

文字列比較における > は、あいうえお順(英語ならABC順)に並べたとき、比較対象が後にくる場合、を表します。

比較対象 > “比較文字列

yomi > “ささき” とした場合、変数yomiが辞書的に「さき」より後ろであるか、を意味します。よって、yomiの値が「さう」の場合は、この比較式が成り立つことになります。

また、5行目を yomi >= “ささき” に変えた場合は、yomiの値が「ささき」の場合も成り立つことになります。

辞書的に前方かどうか(<、<=)の利用例

実行イメージ(辞書的に前方である場合)

名前をひらがなで入力してください: ゆか [Enter]
「ゆか」さん、有希さんの前にどうぞ。

実行イメージ(辞書的に前方ではない場合)

名前をひらがなで入力してください: ゆま [Enter]
「ゆま」さん、有希さんの後ろにどうぞ。

ファイル名:33_if_dic_mae.py

# 辞書的に前方かどうか
print("名前をひらがなで入力してください: ", end="")
namae = input()

if namae < "ゆき":
    print("「{}」さん、有希さんの前にどうぞ。".format(namae))
else:
    print("「{}」さん、有希さんの後ろにどうぞ。".format(namae))

解説

文字列比較における < は、あいうえお順(英語ならABC順)に並べたとき、比較対象が前にくる場合、を表します。

比較対象 < “比較文字列

namae > “ゆき” とした場合、変数namaeが辞書的に「ゆき」より前であるか、を意味します。よって、namaeの値が「ゆ」の場合は、この比較式が成り立つことになります。

また、5行目を yomi >= “ささき” に変えた場合は、yomiの値が「ささき」の場合も成り立つことになります。

参考資料

比較式について詳しくは、Python公式ページの比較の項を参照してみてください。(正直分かりにくいですが…)

6. 式 (expression) 6.10.比較 – docs.python.org

コメント

タイトルとURLをコピーしました