in演算子
同じ形の or が 5 つ並ぶ
おこづかい帳で使うカテゴリは、食費、日用品、娯楽、交通費、その他の 5 種類と決めてあります。利用者が "ごはん" と打ってきたら受け取れないので、打たれた文字列が 5 種類のどれかかを判定したくなります。
or でも書けます。ただ、同じ形の比較を 5 回並べることになって、1 行がとんでもない長さになります。
Python
day = "水"
print(day == "月" or day == "火" or day == "水")3 つでもう長い。5 つ、10 個と増えたら手に負えません。この形をひとことで書くのが in です。
まとまりの中にあるか
in は「左の値が、右のまとまりの中にあるか」を True か False で返します。まとまりを作るには、角かっこ [ ] の中に値をカンマ区切りで並べます。
Python
days = ["月", "火", "水", "木", "金"]
print("水" in days)
print("日" in days)
print("土" not in days)True False True の順に出ます。含まれていないことを調べたいときは not in です。not x in y と書いても動きますが、not in のほうが英語として素直に読めます。
この [...] の形をリストと呼びます。変数に入れずに、in の右へその場で書いても構いません。
右がリストか文字列かで、意味が変わる
in は文字列に対しても働きます。この場合は「その文字列が含まれているか」を調べます。
Python
print("食" in "食費")
print("食" in ["食費", "娯楽"])上は True、下は False です。右が文字列なら 部分として 含まれるか、右がリストなら 要素として 一致するか、という別々の判定になります。"食" という要素はリストの中に無いので、"食費" の一部であっても False です。
左右を逆にすると意味が反転します。左が探す値、右が探される場所です。
やってみよう
関数 is_known_category を実装してください。引数は category の 1 つで、"食費" "日用品" "娯楽" "交通費" "その他" のどれかなら True、それ以外なら False を返します。判定には in を使ってください。
is_known_category("食費") は True、is_known_category("ごはん") は False、空文字の is_known_category("") も False です。
カテゴリ名は 1 文字でも違うと一致しません。"交通" や "交通 費" は別の文字列です。全角と半角、余分な空白に気をつけて写してください。or を 4 つ並べても同じ結果になりますが、いちど書いてみて長さの差を体感しておくと、in のありがたみが分かります。
要件
- 関数名は is_known_category で、引数は category の1つ
- カテゴリは "食費" "日用品" "娯楽" "交通費" "その他" の5種類とする
- 5種類のどれかなら True、それ以外は False を返す
- 判定には in を使う
入出力例
is_known_category("食費") → true
is_known_category("その他") → true
is_known_category("交通費") → true
is_known_category("ごはん") → false
is_known_category("") → false
is_known_category("交通") → false