質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

645閲覧

Pythonでの複数の条件分岐について

Ykkykk

総合スコア140

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/20 06:14

Pythonでのif文についての質問です。
複数の条件を同時に満たす際にある処理を実行したい、という場合、

Python

1if A and B and C and D: 2  実行したい処理 3else: 4  それ以外の処理

という形にすると思うのですが、このような条件分岐の場合に、例えばCの部分でFalseが返ってきている、などということはわかるのでしょうか?

elseの部分でどの条件でFalseが返ってきているのか表示させたいのですが、そのような処理は可能なのでしょうか?
ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

shal0ne

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/08/20 07:24

ご教示いただきありがとうございます。あらかじめSetとする書き方もあるのですね。
guest

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

yukihisa

総合スコア672

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/08/20 07:25

ご教示いただきありがとうございます。このようにelse以下で再度if文を書くことで一つ一つ確認していけばよいのですね。ありがとうございます。
guest

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
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/08/20 07:25

ご教示いただきありがとうございます。 まだ内包表記についてしっかりと理解できていないので、勉強になりました。ありがとうございます。
guest

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 dand が短絡評価であることに基づいて、左からa, b, c, d という順で評価される際に、どの変数で偽になったかだけを表示するものです。全ての変数についての真偽を確認したい場合には、他の回答者の皆様の回答を参考になさってください。

投稿2018/08/20 06:32

編集2018/08/20 07:27
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2018/08/20 07:26

ご教示いただきありがとうございます。 基本的にはelse以下で再度if文を書いて判定していく形になるということですね。 ありがとうございました。
jun68ykt

2018/08/20 07:30

@Ykkykkさん コメントありがとうございます。 > 基本的にはelse以下で再度if文を書いて判定していく形になるということですね。 はい。そのような理解で大筋はよろしいかと思いますが、回答に追記として書いた点もご確認いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問