下記にif文が2つありますが、カッコの有無で真偽が異なります。
chatgptに質問しましたが、納得のいく回答が得られませんでしたので、質問いたしました。
ご存知の方おられましたら、ご教示お願いいたします。
Python
1menu = "abd" 2if "a" in menu or "b" in menu or "c" in menu and "d" not in menu: 3 print(location(), "true") 4else: 5 print(location(), "false") 6 7menu = "abd" 8if ("a" in menu or "b" in menu or "c" in menu) and "d" not in menu: 9 print(location(), "true") 10else: 11 print(location(), "false")
2023.04.21 18:35 /Users/test.py:123 [1] <module> true
2023.04.21 18:35 /Users/test.py:131 [2] <module> false
以下ChatGPTの回答です。
and演算子の方がor演算子よりも優先順位が高いため、and演算子の評価が先に行われます。
- 括弧で囲まれた部分
- not
- and
- or
したがって、以下のように評価されます。
- "a" in menu を評価する。
- "b" in menu を評価する。
- "c" in menu を評価する。
- 3と"d" not in menuをand演算子で評価する。
1〜4の結果をor演算子でつなげた結果を求める。
つまり、"4" not in menuの評価は3とand演算子でまとめて行われます。
Pythonではor演算子は左から右に評価され、左辺がTrueの場合は右辺の評価を行いません。
> chatgptに質問しましたが、納得のいく回答が得られませんでしたので
この回答をご提示ください。同じ回答となる可能性もあります。
and演算子の方がor演算子よりも優先順位が高いため、and演算子の評価が先に行われます。
1. 括弧で囲まれた部分
2. not
3. and
4. or
したがって、以下のように評価されます。
1. "a" in menu を評価する。
2. "b" in menu を評価する。
3. "c" in menu を評価する。
4. 3と"d" not in menuをand演算子で評価する。
1〜4の結果をor演算子でつなげた結果を求める。
つまり、"4" not in menuの評価は3とand演算子でまとめて行われます。
Pythonではor演算子は左から右に評価され、左辺がTrueの場合は右辺の評価を行いません。
上記の説明から、and "d" not in menuが4番目に計算されている、というところが理解できません。
ここは、質問に対するコメントを書くところですので、コメントへの回答は質問を編集して追記/変更したほうがいいですよ。
質問文修正いたしました。

回答3件
あなたの回答
tips
プレビュー