Pythonでのif文についての質問です。
複数の条件を同時に満たす際にある処理を実行したい、という場合、
Python
1if A and B and C and D: 2 実行したい処理 3else: 4 それ以外の処理
という形にすると思うのですが、このような条件分岐の場合に、例えばCの部分でFalseが返ってきている、などということはわかるのでしょうか?
elseの部分でどの条件でFalseが返ってきているのか表示させたいのですが、そのような処理は可能なのでしょうか?
ご教示いただけますと幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
あまりスマートじゃありませんが、次のように書けます。
Python
1if A and B and C and D: 2 実行したい処理 3else: 4 if not(A): 5 print("A is false") 6 if not(B): 7 print("B is false") 8 if not(C): 9 print("C is false") 10 if not(D): 11 print("D is false") 12 それ以外の処理
もしくは条件をSetにして
Python
1boolSet={A,B,C,D} 2 3if A and B and C and D: 4 実行したい処理 5else: 6 for bool in boolSet: 7 count=0 8 if not(bool): 9 print("condition "+str(count)+" is false") 10 count+=1 11 それ以外の処理 12 13"""もしCがfalseならcondition 2 is falseと出力"""
とも書けます。
投稿2018/08/20 07:14
総合スコア51
0
手元に環境が無く動作確認はしておりませんが
python
1errStr = '' 2 3if A and B and C and D: 4 実行したい処理 5else: 6 if not A: 7 errStr += ' A' 8 if not B: 9 errStr += ' B' 10 if not C: 11 errStr += ' C' 12 if not D: 13 errStr += ' D' 14 15if errStr != '': 16 print('Error at'+errStr)
これでどの部分でFalseが返ってきているかはわかると思います。
投稿2018/08/20 06:50
総合スコア672
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
python
1A, B, C, D = True, True, False, True 2 3if A and B and C and D: 4 print("all true") 5else: 6 print(next((x[1] for x in [(A, "A"), (B, "B"), (C, "HOGE"), (D, "D")] if not x[0])) + " is false") 7 8#=> HOGE is false
普通
python
1A, B, C, D = True, True, False, True 2 3if not A: 4 print("A is false") 5elif not B: 6 print("B is false") 7elif not C: 8 print("C is false") 9elif not D: 10 print("D is false") 11else: 12 print("all true") 13 14#=> C is false
投稿2018/08/20 06:42
編集2018/08/20 07:08総合スコア16731
0
ベストアンサー
こんにちは
もっとよい書き方があるかもしれませんが、とりあえず、以下でいけるのではないかと思います。
python
1a = 1 2b = 'hello' 3c = False 4d = {} 5 6if a and b and c and d: 7 print('Everything is good') 8elif not a: 9 print('NG at a') 10elif not b: 11 print('NG at b') 12elif not c: 13 print('NG at c') 14elif not d: 15 print('NG at d') 16
上記を実行すると、 NG at c
と表示されます。
はじめの4行で設定している、a
, b
, c
, d
の値を色々変えてみて、
期待されている動作と同じか、ご確認頂ければと思います。
追記
上記の回答は、a and b and c and d
の and
が短絡評価であることに基づいて、左からa
, b
, c
, d
という順で評価される際に、どの変数で偽になったかだけを表示するものです。全ての変数についての真偽を確認したい場合には、他の回答者の皆様の回答を参考になさってください。
投稿2018/08/20 06:32
編集2018/08/20 07:27総合スコア9058
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/20 07:24