#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の合計なんて、もっとよい関数あるだろって意味では間違いかもしれない。~
そういうものだろう。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS