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

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

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

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

Q&A

解決済

2回答

232閲覧

Pythonのインデントについて

Tohmas_1010

総合スコア13

Python 3.x

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

0グッド

0クリップ

投稿2019/10/30 13:42

一つ目の文は、for文のブロック内でvarianceを実行した際に
4.0
5.0
54.0
55.0
176.0
このように出力されます。

ですが、for文ブロックから抜けて0行目でvarianceを実行すると176.0のみ出力されるのはなぜでしょうか?

インデントによる作用についての理解が足りないようです。

python

1for height in monk_fish_team: 2 variance = variance + (height-mean)**2 3 print(variance)

python

1import math 2monk_fish_team = [158, 157, 163, 157, 145] 3 4total = sum(monk_fish_team) 5lenght = len(monk_fish_team) 6mean = total/lenght 7variance = 0 8 9for height in monk_fish_team: 10 variance = variance + (height-mean)**2 11variance = variance/lenght 12hensa = math.sqrt(variance) 13print(hensa)

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

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

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

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

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

guest

回答2

0

Pythonの構文はインデントが重要です。

python

1for i in range(10): 2 print("hoge") 3print("piyo")

上記はhogeは10回表示されますが、piyoは1回しか表示されません。
これは、for分の範囲がインデントが降りているところまでだからです。
c言語などのように、for文の範囲を{}で指定しないのて注意か必要です。

投稿2019/10/30 13:48

qax

総合スコア622

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

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

Tohmas_1010

2019/10/31 04:02 編集

for i in range(10): ----print(i) print(i) ブロック内だと引数0~9が全て表示されるのに対して、外れると引数の最後のみが表示されるってことですね理解できました。 つまり初期値0のvarianceに(height-mean)**2を足すと加工した要素の合計が得られるがfor文の範囲だと加工の過程まで表示してしまうため、敢えて外してから加工した要素の合計のみを表示させるのですね。 この考えで大丈夫でしょうか?
qax

2019/10/31 05:15

ご推察の通りです。
Tohmas_1010

2019/11/04 04:03

質問に回答してくださりありがとうございました。 為になりました、またよろしくお願い致しますm(__)m
guest

0

ベストアンサー

for文ブロックから抜けて0行目でvarianceを実行すると176.0のみ出力されるのはなぜでしょうか?

『for文から抜けて最初の行でvarianceを評価すると~』と読み替えて回答します。


ちょっと雑な説明で恐縮なんですが、次のように書いているのと動作が同じだからです。

Python

1monk_fish_team = [158, 157, 163, 157, 145] 2 3... 4 5height = monk_fish_team[0] 6variance = variance + (height-mean)**2 7 8height = monk_fish_team[1] 9variance = variance + (height-mean)**2 10 11... 12 13height = monk_fish_team[5] 14variance = variance + (height-mean)**2 15 16print(variance) # => 176.0

投稿2019/10/30 13:47

編集2019/10/30 13:50
LouiS0616

総合スコア35660

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

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

Tohmas_1010

2019/10/31 04:22

お世話になっております。 分かりやすい回答ありがとうございます。 質問の内容とは関係ないのですが、varianceの初期値を0にすることの重要性がわかりません。 最初にvariance=0を書かずに、 ””” height=monk_fish_team[o] variance= (height-mean)**2 ””” としても書いた場合と同じ4.0という答えが返ってくるので疑問に思いました。
LouiS0616

2019/10/31 04:27

一番最初の要素だけ特別扱いするなら、それでも良いです。 ただ実際にはfor文を使って全要素に同様の処理をしますので、varianceを0に初期化するのは非常に合理的な判断です。
Tohmas_1010

2019/10/31 05:30

初期値を0にせず進めると、ただ単に要素一つ一つの計算結果を出力するだけになってしまう。 なので、最終的に要素一つ一つの計算結果の合計を出すために、「variance(初期値0)+計算結果」にするのでしょうか?
LouiS0616

2019/10/31 06:05

ええと、まず『計算が妥当に行われるか』と『どのタイミングでprintされるか』は分けて考えるべきです。 途中の値を出力したいならfor文の中にprintを突っ込めばいいですし、計算結果だけ分かれば良いのならfor文を脱出した後にprintを置いてやれば良いです。
Tohmas_1010

2019/11/04 04:05

質問に回答してくださりありがとうございました。 勉強になりました、またよろしくお願い致しますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問