01 / 07
止まらないプログラム
while のレッスンで「進める行を忘れると終わらない」と書いたね。実際にやるとこうなるよ。
kazu がずっと 0 のままなので、kazu < 3 はいつまでも成り立つ。同じ行がひたすら流れ続けるんだ。
kazu = 0while kazu < 3: print(kazu)実行結果
0 0 0 このあとも止まらないので、教材のランタイムが一定時間でくり返しを打ち切る
くり返しとデータの持ち方
INPUT · スライド
01 / 07
while のレッスンで「進める行を忘れると終わらない」と書いたね。実際にやるとこうなるよ。
kazu がずっと 0 のままなので、kazu < 3 はいつまでも成り立つ。同じ行がひたすら流れ続けるんだ。
kazu = 0while kazu < 3: print(kazu)実行結果
0 0 0 このあとも止まらないので、教材のランタイムが一定時間でくり返しを打ち切る
02 / 07
while は条件が成り立たなくなったときだけ終わる。ということは、終わらせるには条件に出てくる値が変わらないといけない。
上の例で条件に出てくるのは kazu ひとつ。その kazu を変える行がどこにもない。誰も終わらせに行っていないんだ。
止まらないコードを見たら、まずこう問いかけよう。「条件に出てくる値を、誰が変えている?」
03 / 07
無限ループの原因は、たいていこのどれかだよ。
kazu += 1 が無いどれも「条件に出てくる値がどう動くか」を追えば見つかる。頭の中で走らせず、指で1周ずつ追うのがコツだよ。
04 / 07
書き忘れていなくても、字下げが足りなければくり返しの外。中から見れば、書いていないのと同じだよ。
下の例では kazu += 1 が左端に戻ってしまっている。Python はエラーを出さない。文法としては正しい、終わらないプログラムのできあがりだ。
kazu = 0while kazu < 3: print(kazu)kazu += 1実行結果
0 0 0 このあとも止まらないので、教材のランタイムが一定時間でくり返しを打ち切る
05 / 07
while kazu > 0: は「kazu が0より大きいあいだ続ける」。そこで kazu を増やしてしまうと、条件はますます成り立ってしまう。
進める行はちゃんと中にあるのに終わらない。向きが、終わりに近づく側かどうかを条件と見くらべて確かめよう。
kazu = 1while kazu > 0: print(kazu) kazu += 1実行結果
1 2 3 このあとも止まらないので、教材のランタイムが一定時間でくり返しを打ち切る
06 / 07
この教材のランタイムは、一定時間たつとくり返しを自動で打ち切るようにしてある。だからここでは安心してまちがえられるよ。
無限ループは初心者だけのものではない。仕事でコードを書く人もふつうに作ってしまう。ちがうのは直せるかどうかだけだ。
「なぜ終わらないのか」を自分の言葉で説明できるようになれば、それはもう理解したということ。だからこのレッスンの演習は、ぜんぶ止まらないコードを直して終わらせる問題にしてあるよ。
07 / 07
止まらないコードに出会ったら、この順に見ていこう。
4つとも通れば、そのくり返しは必ず終わる。走らせる前に終わることを自分で確かめられるようになれば、もうこわくないよ。