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

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

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

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

Q&A

解決済

2回答

265閲覧

pythonのブーリアンについて

blendegg

総合スコア81

Python

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

0グッド

1クリップ

投稿2019/04/28 10:49

###質問
pythonのブーリアンについて
以下の2つのコードの違いはなんですか?
どちらもキーの入力を検知するコードなんですが、後者は動きません

前者のif key_pressとはどんな情報を受け取っているのでしょうか
Trueであれば後者も動くはずなのですが

コード1は「もしkey_pressだったら」という条件
コード2は「もしkey_pressがTrueだったら」という条件
この違いがわかりません

###コード1
key_press = input()
if key_press:
print("true")
else:
print("false")

###コード2
key_press = input()
if key_press == True:
print("true")
else:
print("false")

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

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

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

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

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

guest

回答2

0

ベストアンサー

ifの後には、論理値を返す式だけで無く、どんな式(値)も書けます。

6. 式 (expression) — Python 3.7.3 ドキュメント

次の値は偽だと解釈されます: False 、 None 、すべての型における数値の 0、空の文字列、空のコンテナ (文字列、タプル、リスト、辞書、集合、凍結集合など)。 それ以外の値は真だと解釈されます。

input()で得られる値は文字列なので、入力した物が、空の文字列であれば偽、1文字以上ある文字列であれば真となります。
文字列である限り、Trueとは等しくないので、key_press == Trueは常に偽です。

投稿2019/04/28 11:04

otn

総合スコア84423

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

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

blendegg

2019/04/28 11:41

inputに文字列が入れば真なのであれば、key_press == Trueは成り立つのではないのですか?
otn

2019/04/28 12:02

成り立ちません。 ちょっと言葉が難しいかと思って、引用部分から省いたのですが、全文は、 > ブール演算のコンテキストや、式が制御フローの文で使われる際には、次の値は偽だと解釈されます: (以下略) です。「ブール演算のコンテキストや、式が制御フローの文で使われる際には」と前提が付いています。 == 演算の時は対象外です。また、あくまで「解釈される」だけでTrueやFalseと等しいわけではありません。
blendegg

2019/04/28 13:17

うーんよくわからないです if key_pressはどういう条件式になるんでしょうか もしkey_pressだったら?という条件の意味がわかりません 何と比較しているんでしょうか?比較はしていないのですか?
blendegg

2019/04/29 01:36

比較はしてないんですね a = False if (a == True): print("true") else: print("false") これは自分自身との比較とは言えますか?
otn

2019/04/29 01:59

「自分自身との比較」の意味がわかりません。
guest

0

論理値ってのは、0か、0でない、かで判定されます
しかし、Trueという定数は1なんですね

ということで、

if key_press == True:

は、key_pressが1のときにしか真になりません

真偽値を判定する場合は、Trueと比較するのではなく、False(0)と比較しましょう

if key_press != False:

ということで。

投稿2019/04/28 11:16

y_waiwai

総合スコア87719

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

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

hayataka2049

2019/04/28 12:45 編集

当然ながらpythonの式"" != FalseはTrueを返しますが、""もboolに変換すればFalseです。
hayataka2049

2019/04/28 12:53 編集

究極的には__bool__と__eq__はそれぞれ独立に自由に実装できるため、比較演算子だけを使ってオブジェクトの真理値を知ることは原理的に不可能です。
blendegg

2019/04/28 13:04

しかし、 key_press = input() if key_press != False: print("true") else: print("false") だとキーを押しても押さなくてもtrueです enterは押していますが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問