Q&A
ブール演算子orに関する質問ですが、
name1,name2,name3,name4= '', 'suzuki','tanaka','sato' selected_name = name1 or name2 or name3 or name4 print(selected_name) >> suzuki
の出力結果が、''、'tanaka'、'sato'ではなく、'suzuki'になるのはなぜでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
7
ベストアンサー
これは「ブール演算子の短絡評価」と呼ばれる動作と、「最後に評価された値を返す」という動作の組み合わせによるものです。
https://docs.python.org/ja/3/tutorial/datastructures.html#more-on-conditions
ブール演算子 and と or は、いわゆる 短絡 (short-circuit) 演算子です。これらの演算子の引数は左から右へと順に評価され、結果が確定した時点で評価を止めます。例えば、 A と C は真で B が偽のとき、 A and B and C は式 C を評価しません。一般に、短絡演算子の戻り値をブール値ではなくて一般的な値として用いると、値は最後に評価された引数になります。
このため、提示されたコードは以下のように動作します。
selected_name = '' or 'suzuki' or 'tanaka' or 'sato'
'' or 'suzuki'
が評価され、''
は偽だが'suzuki'
は真となり、偽 or 真
の結果は真となる。短絡評価が働き、ここ残りの'tanaka'
,'sato'
は参照されない。ここで、最後に評価された'suzuki'
がselected_nameに代入される。
投稿2017/12/10 22:16
編集2017/12/10 22:17総合スコア1845
0
python
1name1,name2,name3,name4= '', 'suzuki','tanaka','sato' 2 3bool(name1), bool(name2), bool(name3), bool(name4) 4""" 5論理値は以下のように判断されます 6(False, True, True, True) 7""" 8name1 or name2 9""" 10False or True なのでname2がとりだされ 11""" 12name2 or name3 13""" 14True or True なので左のname2がとりだされ 15""" 16name2 or name4 17""" 18上記と同じです 19"""
以上からsuzuki
が取り出されます。
ここが参考になると思います。
Python の or と and 演算子の罠
投稿2017/12/10 22:14
総合スコア1168
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
ADO経由のPL/SQLエラー
回答1
クリップ0
更新
2023/01/18
Q&A
解決済
powershell ForEach-Object の複数列への処理
回答1
クリップ0
更新
2021/08/26
Q&A
解決済
javaで複数の変数でgroup byしてリストにする方法について
回答1
クリップ0
更新
2021/09/11
Q&A
解決済
DB登録処理のページでFatal errorが出てしまいます...
回答4
クリップ2
更新
2016/06/20
Q&A
解決済
DBの登録で 未入力で空文字だったり nullであってもエラーは回避できないのか?
回答1
クリップ2
更新
2016/06/20
Q&A
受付中
【PHPmySQL】複数行をUPDATEするSQL文【PDO】
回答3
クリップ0
更新
2022/01/12
Q&A
解決済
pythonでname0,name1,name2・・・のように変数を宣言したい
回答4
クリップ9
更新
2015/04/27
同じタグがついた質問を見る
Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。
Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2017/12/10 22:44
2017/12/10 23:10
2017/12/11 01:29