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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

649閲覧

Pythonのand演算子の使い方

Henjin213

総合スコア22

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/09/30 09:09

プログラミング初心者で、Pythonを学んでいます、
Pythonチュートリアルを読みながら勉強しているのですが、第5章の5.7 「条件についての補足」のところで、わからないところがあります。
まず、サンプルコードは

Python

1string1, string2, string3 = '', 'Trondheim', 'Hammer Dance' 2non_null = String1 or string2 or string3 3print(non_null)

となります。ここは、理解できます。空文字である''はfalseで、ほかはTrueなので、Trondheimで処理が終わるということですよね?
左から順に呼んでいく、ということは理解しているつもりです。
しかし、and の場合の処理の手順がわかりません。

Python

1num1, num2, num3 = 123, 456, 789 2a = num1 and num2 and num3 3print(a)

これでなぜ実行結果が789になるのかがわかりません。
初心者でもわかるように教えていただけると助かります。
よろしくおねがいします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

orについては理解しているようなので、pythonのandorは基本的にbool型オブジェクトを返す訳ではなくオペランドを返すというということは分かっているのだと思います。

(念の為参考リンク)
Python の or と and 演算子の罠 - Qiita

途中で評価を切り上げるのは短絡評価と言って、様々なプログラミング言語で用いられている最適化です。orの場合の評価が'Trondheim'で終わるのは、この先を見ても見なくても全体の値が真であることが確定するからです。

andの場合、途中で偽の値が出てきたら全体の値が偽であることは確定して切り上げることができます。一方で、真が続く場合は途中で確定させることはできません。最後の一個が偽かもしれないからです。なので、最後まで見てぜんぶが真であることを確かめてから切り上げます。

つまり、andorで短絡評価の仕方が少し異なります。

投稿2019/09/30 09:51

編集2019/09/30 09:55
hayataka2049

総合スコア30933

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

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

0

pythonでの数値判定は、0以外はTrueとなるので、
andで判定する場合、Falseになるまで判定され続けてた結果、789が入ります。

公式ドキュメントの参考リンクは以下です。
https://docs.python.org/ja/3/library/stdtypes.html#truth-value-testing

投稿2019/09/30 09:59

yodel

総合スコア508

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

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

0

「123」も「456」も「789」もTrueなので、最後の789が返されています。
試しにnum1を0として試してみると、num1がFalseとなり、num2の判定を行わないため、0が返されます。
比較するとわかりやすいのではないでしょうか。

投稿2019/09/30 09:38

yamap55

総合スコア1376

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問