#author("2022-06-25T07:59:42+09:00","default:yakumo_murakami","yakumo_murakami") #author("2022-06-25T08:16:07+09:00","default:yakumo_murakami","yakumo_murakami") [[今さらPython]] whileでループさせると、どんな風に動くのか検証してみた。 * 1から10までの合計 [#n282beb6] ** コード [#o7738f67] str = "経過" i=0 n=0 while i<10: i=i+1 n=n+i print(str,i,":",n) str = "合計" print(str,n) ** 実行 [#oe768c57] illyasviel@lucifer35:~$ python3 hello.py 経過 1 : 1 経過 2 : 3 経過 3 : 6 経過 4 : 10 経過 5 : 15 経過 6 : 21 経過 7 : 28 経過 8 : 36 経過 9 : 45 経過 10 : 55 合計 55 illyasviel@lucifer35:~$ whileの条件は i<10 のはずだけど、最終ループでは i==10 になってる。~ これはなぜか?~ もちろんループ開始時点では i==9 で、途中で i=10 になるからよね。 つまりループは0から9だけど、足し算してるのは 1から10 なわけ。 whileループは、''whileの後ろに書かれている値が『真』である限り回り続ける'' 。~ 例題の場合、iが1ずつ増えていくので、0〜9まで実行され、10になった(真(true)→偽(false))時点でループからぬけて次へ行く。~ iを増やしてからnに足しているので、 ''nには1から10まで順番に足されて'' いき ''当然、結果は55となる'' 。 別の解として、こんなコードも考えてみたわ。 * コード2 [#r7cf334d] str = "経過" n=0 for i in range(10): n=n+i+1 print(str,i,":",n) str = "合計" print(str,n) range(10)すると10回実行してくれるけど、変域が1〜10でなく0〜9になっちゃう。だから余計に+1ずつ足していく必要があるわね。 * 実行 [#v1e6cd7b] 経過 0 : 1 経過 1 : 3 経過 2 : 6 経過 3 : 10 経過 4 : 15 経過 5 : 21 経過 6 : 28 経過 7 : 36 経過 8 : 45 経過 9 : 55 合計 55 学校なんかでどういう評価をするのか知らないけど、これはどちらでも正解であり間違いと言える。~ ''要は答えが出ればいい'' わけで、ロジックも同じなら、あとは好きにすればいいという意味では正解かもしれない。~ 効率なりなんなりを追求するなら、そもそも1〜10の合計なんて、もっとよい関数あるだろって意味では間違いかもしれない。~ そういうものだろう。