「not と and / or の組み合わせ」は、実務コードでよく出てくるけれど、初心者には少し読みにくいパターンです。ここでは よくある実務的な利用例 を整理してみます。
よく使うパターン
1. 「どちらでもない」条件
休日でもなく、雨でもないときに出社する、など。
if not (is_holiday or is_rainy):
print("出社します")
Pythonis_holiday or is_rainy→ 「休日または雨」not (...)→ 「休日でもなく雨でもない」
👉 実務でよくある「両方ともFalseならTrue」パターン。
2. 「両方とも満たさない」条件
ユーザーが「管理者でもなく、ログイン済みでもない」場合にアクセス拒否。
if not (is_admin and is_logged_in):
print("アクセス拒否")
Pythonis_admin and is_logged_in→ 「管理者かつログイン済み」not (...)→ 「両方満たしていない」
👉 セキュリティチェックでよく使う。
3. 「どちらかがFalseならTrue」条件
「有効期限が切れている」または「支払いが未完了」なら利用不可。
if not (is_valid and is_paid):
print("利用できません")
Pythonis_valid and is_paid→ 「有効かつ支払い済み」not (...)→ 「どちらかが欠けている」
👉 契約や認証の判定で頻出。
4. 「禁止条件の否定」
「ブラックリストに入っていない」かつ「停止フラグが立っていない」ユーザーだけ許可。
if not (is_blacklisted or is_suspended):
print("利用可能です")
Python👉 ブラックリストやエラーフラグのチェックでよく使う。
リファクタのコツ
実務では「not + and/or」は便利ですが、読みづらくなることが多いので以下の工夫がよくされます:
- 肯定形に書き換える
if not (is_holiday or is_rainy)→if not is_holiday and not is_rainy
- 変数名を工夫する
if not (is_blacklisted or is_suspended)よりif is_active_user:の方が読みやすい。
✅ まとめ
not (A or B)→ 「AでもBでもない」not (A and B)→ 「AとBを両方満たしていない」- 実務では 認証・権限チェック、エラーフラグ判定、利用可否判定 でよく使う。
- 読みやすさのために 肯定形や変数名の工夫 が重要。


