teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

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

Python

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

Q&A

解決済

3回答

4340閲覧

TrueとFalseをreturnした時の処理

keip

総合スコア33

Python 3.x

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

Python

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

0グッド

3クリップ

投稿2019/01/11 07:11

編集2019/01/23 06:10

0

3

こんにちは。
お忙しいところ申し訳ありませんが回答していただける方おりましたらよろしくお願い致します。

当方プログラミング初心者で、Progateにてトレーニングしております。
そのProgateの中の練習で分からない部分がありましたので教えていただきたいです。

以下の部分がうまく理解できません。
(画像が不適切だったため削除しました)

上の赤枠ではvalidate関数は「0より小さい、または2より大きい場合はFalseであり、そうでない場合はTrueである」というプログラムになっています。

そして下の赤枠でそのvalidate関数が使用されています。ここで疑問があります。
定義されたvalidate関数は、TrueかFalseかという判断をreturnするだけの関数であると思います。
そもそもなぜif文の中でvalidate関数が成り立つのでしょうか?
そしてなぜ下枠のif関数では上のif文がTrueであるという前提の条件文で、下のelse文がFalseであるという前提なのでしょうか?
TrueとFalseに何かルールがあるのでしょうか?

そしてその次の練習では、下の画像のように、validate関数の定義の中のelse:を消してください。という指示がありました。
else:がないのになぜTrueとFalseをreturnするという判断の関数が成り立つのでしょうか?if文の中で反例がある場合には必ずelse:が必要であると思っていましたが、何か別のルールがあるのでしょうか?
(画像が不適切だったため削除しました)

超初心者であるがために、用語も曖昧で説明も非常にわかりづらいかと思います。申し訳ありません。

もし回答していただける方おりましたらよろしくお願い致します。

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

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

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

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

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

tiitoi

2019/01/11 07:19

validate 関数を見ると、hand < 0 or hand > 2 が成り立つかどうかにかかわらず、必ず False/True のどちらかの値が返るようになっていると思いますが、どのような点が疑問なのでしょうか?
keip

2019/01/11 07:29

回答ありがとうございます。 初心者なもので、自分がわからない点を伝えようとするだけでも一苦労です^^; 少し自分の中で整理してみます。
guest

回答3

0

関数以前にif文が理解できていないのだと思います。
Pythonのif文は条件部に任意の式を置くことができます。

  • 条件を示す式だったり (これしかできないと思っていませんか?)
    if num == 42: (註1)
  • 関数を呼び出して得た値だったり
    if validate():
  • 変数そのものだったり
    if tf:

validateを呼び出して、結果Trueが得られればif文の本体が実行されます。 (註2)

註1:
『== や > は条件部でしか使えない』という誤解も生じがちです。
これらは比較結果を返す演算子でしかなく、その点では + や * と何ら変わりありません。

註2:
厳密には『Trueが得られれば』というより『真値が得られれば』ですが。


else:がないのになぜTrueとFalseをreturnするという判断の関数が成り立つのでしょうか?if文の中で反例がある場合には必ずelse:が必要であると思っていましたが、何か別のルールがあるのでしょうか?

elseは必須ではありません。
ifの条件に合わないときに実行する処理を『書くことができる』だけです。

投稿2019/01/11 07:21

編集2019/01/11 07:26
LouiS0616

総合スコア35676

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

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

keip

2019/01/11 07:34

回答ありがとうございます。LouiS0616さんのおっしゃる通り、どうやらif文についてしっかり理解できていないようでした。 ifについて再度調べてから、この疑問について考えて、それでもわからない場合は再度質問させていただきたいと思います。 学習のヒントをくださりありがとうございます
LouiS0616

2019/01/11 07:35

if validate(player_hand): ではなく、 tf = validate(player_hand) if tf == True: とか書けばしっくりくるのかもしれませんね。 二重三重に冗長な書き方なので避けるべきではありますが。
guest

0

ベストアンサー

誤読を避けるために言葉を定義しておきます。
上の赤枠を「validate関数の定義」とし、
下の赤枠を「validate関数の呼び出し」とします。


定義されたvalidate関数は、TrueかFalseかという判断をreturnするだけの関数であると思います。
そもそもなぜif文の中でvalidate関数が成り立つのでしょうか?

この「if文の中で」というのはvalidate関数の呼び出しのif文のことでしょうか?
if文はTrue/Falseの情報を必要とするので、関数の戻り値がTrue/Falseであれば問題ありません。

そしてなぜ下枠のif関数では上のif文がTrueであるという前提の条件文で、下のelse文がFalseであるという前提なのでしょうか?
TrueとFalseに何かルールがあるのでしょうか?

if文とはそういうものです。
ifの条件に当てはまる(=True)であればif文の直後のブロックが処理されて、
当てはまらない(=False)であればelse文の直後のブロックが処理されます。

「もし今日が平日なら起きて、違うなら二度寝する」という文と同じです。
もし~ならがif [条件式]:で、違うならがelse:です。

else:がないのになぜTrueとFalseをreturnするという判断の関数が成り立つのでしょうか?
if文の中で反例がある場合には必ずelse:が必要であると思っていましたが、何か別のルールがあるのでしょうか?

成り立ちます。
関数の返り値は必ず全パターン使う必要はありません。

ルールがあるとすればelse:がなくてもいいというルールですかね。
そもそも「else:が必ず必要」というルールはないです。

投稿2019/01/11 07:39

dice142

総合スコア5158

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

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

keip

2019/01/11 07:46

回答ありがとうございます。 回答いただいた解説で、ifとTrue/Falseの関係についておそらく理解できました。 「ifの条件に当てはまる(=True)」であるという考え方が欠けていたために自分の中でifとTrue/Falseの関係性がごちゃごちゃになっていました。 回答いただいた解説を元にもう一度整理し直してみます。 また何か質問することがあるかもしれませんが、もし回答していただけるのであればよろしくお願いしたいです。 ありがとうございます。
guest

0

分かる範囲のみ回答します。

TrueとFalseに何かルールがあるのでしょうか?

validate関数は、入力された手が正しいかを判定しています。
その戻り値は0=グー~2=パーの範囲外ならFalse、範囲内ならTrueの意味です。
呼出元ではこの判断をもとに、Falseであれば再入力を促すメッセージを表示するような流れになっています。

else:がないのになぜTrueとFalseをreturnするという判断の関数が成り立つのでしょうか?

elseがない場合は、その直下の文が実行されます。すなわちreturn Trueが実行され、関数の動作としては正しいものとなっています。

投稿2019/01/11 07:21

can110

総合スコア38352

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

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

keip

2019/01/11 07:32

can110さん、再度回答いただきありがとうございます。 どうやらif文がまだしっかり理解できていないようで、returnされたTrueとFalseとif文の関係についての疑問を説明するのにも自分の中でゴチャゴチャになっております。 elseがない場合の回答については理解できました。ありがとうございます。 少し自分の中でもう一度考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問