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公式ページの比較の項を参照してみてください。(正直分かりにくいですが…)
コメント