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

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

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

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

Q&A

解決済

4回答

2700閲覧

「if文の条件に比較演算子を使わないとき」の読み方がわかりません

Murasaki_PurPle

総合スコア37

Python

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

0グッド

1クリップ

投稿2019/09/25 10:34

「if文の条件に比較演算子を使わないとき」の読み方がわかりません

Pythonでif文をやっています。基本的なことはわかる(つもり)なのですが、if文の条件が「比較演算子 論理演算子」を使わない場合の文を日本語訳できずに困っています。

該当のソースコード

整数aがbで割り切れるかどうかの判定を行うだけのシンプルな文です。

Python

1a = int(input("整数a : ")) 2b = int(input("整数b : ")) 3 4c = b != 0 and a%b 5print(c, end="...") 6 7if c: 8 print("aはbで割り切れません。") 9else: 10 print("bが0 または aがbで割り切れます。") 11

3行目の論理演算子andの使い方は理解しています。
左の条件が偽の時は、A and Bが成立し得ないので、Falseがcに代入されます。

左の条件が真の場合、右の条件

a%b

の値がcに代入されます。

問題は、そのあとのif文です。

if c:

とありますが、変数cにFalseないし数字が代入されているので、

else: print("bが0 または aがbで割り切れます。")

が実行される間も無く処理が終了してしまう気がしています。
この時点で、「if文の正しい読み方を理解していないのだな...」と絶望してしまいました。

お忙しい中恐縮ですが、回答をお願いいたします。

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

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

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

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

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

ozwk

2019/09/25 10:56 編集

> 実行される間も無く処理が終了してしまう気がしています。 なぜそう思うのですか?
guest

回答4

0

Pythonドキュメントより

ブール演算のコンテキストや、式が制御フローの文で使われる際には、次の値は偽だと解釈されます: False 、 None 、すべての型における数値の 0、空の文字列、空のコンテナ (文字列、タプル、リスト、辞書、集合、凍結集合など)。 それ以外の値は真だと解釈されます。

a%b が「0」のとき、b != 0 and a%b が”偽”となって、else節が実行されるのかと思います。

投稿2019/09/25 10:51

meg_

総合スコア10580

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

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

0

ベストアンサー

python

1if c: 2 print("aはbで割り切れません。") 3else: 4 print("bが0 または aがbで割り切れます。")

上記の処理は、次のように置き換えられると思います

python

1# c に数値(今回は3とする)が入っているとき 2if 3: 3 print("aはbで割り切れません。") 4else: 5 print("bが0 または aがbで割り切れます。") 6 7# c に false が入っているとき 8if False: 9 print("aはbで割り切れません。") 10else: 11 print("bが0 または aがbで割り切れます。")

ですよね?

if False:後も処理が引き続き実行されるかどうかは、次のコードを実行すれば確認できると思いますので、やってみてください。

python

1if False: 2 print('絶対実行されない') 3else 4 print('きっと実行されるよ')

※当たり前ですが、c に 数値が入っているときは、else:以下の処理は実行される間もなく終了しますが...

投稿2019/09/25 11:42

編集2019/09/25 13:09
siruku6

総合スコア1382

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

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

LouiS0616

2019/09/25 11:50

> c に 数値が入っているときは 0はfalsyです。
siruku6

2019/09/25 11:54

知りませんでした、、ご指摘ありがとうございます!
hayataka2049

2019/09/25 13:02

pythonにfalseなど存在しません
siruku6

2019/09/25 13:08

Falseですね、ご指摘ありがとうございます。 これは誤記でしたので修正します
guest

0

途中の出力を無視すれば、次のように書いているのと同じです。

Python

1if b != 0 and a%b: 2 ... 3else: 4 ...

本当にelse節が『実行される間も無く処理が終了してしまう』でしょうか?

投稿2019/09/25 10:42

編集2019/09/25 10:43
LouiS0616

総合スコア35660

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

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

0

Falseが例外だと思ってらっしゃる……?
じゃあ一体何があればelse節が実行されると思っていたのでしょうか?
比較演算の返り値はTrue/FalseのBool型なんですが。

投稿2019/09/26 08:22

kairi003

総合スコア1330

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問