さっそくだが、クイズだ。
Q.
厚さ1mmの紙がある。これを2つに折り曲げると2mmになる。もう一度折り曲げると4mm….
この作業を繰り返し行うと何回で月に届くであろうか?。なお月までの距離は384,400 kmである。
さて、どのくらいであろうか。
100回?1000回?10000回?
今回はこのクイズをpythonを使って解いてみよう。
今回は厚みを2倍にする処理を繰り返し行えばよさそうだ。
こういった時、pythonではwhile文を使う。
本題に取り掛かる前にwhile文の基本を学ぼう。
具体的なソースコードにしてみる。
[実行結果]
一行目で変数nに0を代入している。
while文ではまず条件の判定を行う。
nは最初0なので
0<10
これは真となるので、字下げされた部分の処理を行う。
0と出力して、nに1を足している。
字下げされた部分が終わったら再び条件に戻って判定を行う。
nは1になっているので
1<10
また真なので処理を行う。
1と出力してnを1増やす
条件に戻って判定
2<10
出力、nを1増やす
以下同様に繰り返しnが9の時、条件は
9<10
となって真。
9と出力してnを1増やす
条件に戻って判定
10<10
これは正しくない,偽だ。
偽になったならwhile文を抜ける。
-----
条件を満たしている間、ループする感じを掴めただろうか?
ここで大事なのが処理の中の以下の部分だ。
n=n+1
これがないとnはずっと0のままで条件が偽になることがなくなってしまい「無限ループ」となってしまう。
問題にチャレンジ
OK。while文の基本がわかったのでさっそく月の問題にチャレンジしよう。
まず必要となる値を宣言しよう
384400キロをmmに変換している。キロはメートルの1000倍、メートルはmmの1000倍なので0を6個増やせば良い。
紙の厚みを管理する変数thicknessを作って最初の厚み1mmを代入している
countは何回折り曲げたかを管理する変数だ。最初は0
ちなみにソースコードについている
# 紙の厚さ(mm)
はコメント文で、これはプログラムの実行に影響を与えない。今回みたいにメモ書きなどをしたい場合に使う。#記号の後ろはコメントとして扱われる。
while文
それではwhile文を作成しよう。紙の厚みが月の距離より短い間、繰り返し処理を行えばよさそうだ。
while thickness < dist:
あとはこの中に2倍する処理、カウントを増やす処理を入れればよい。
追記していこう。
9 | print (count, '回折り曲げた' , '厚み:' ,thickness) |
今回は途中の厚みも毎回表示するようにしてみた。
while文を抜けた時が月の距離を超えた時だ。
最後のその回数を出力しよう。
05 | while thickness < dist: |
09 | print (count, '回折り曲げた' , '厚み:' ,thickness) |
12 | print (count, '回で月に到達しました。' ) |
なんと39回で月に到達してしまった。このように倍々に増えていく事象は大爆発する。
バイバインの検証
倍々で思い出したが、ドラえもんの道具でものを5分ごとに倍にしていく「バイバイン」というのがある。
漫画の中ではのび太が栗まんじゅうにかけて処理しきれなくなり宇宙に送るという暴挙で終わるのだが,実際にどの程度増えるのかpythonで検証してみよう。
5 | while minute < day_minute: |
結果(1日)
497323236409786642155382248146820840100456150797347717440463976893159497012533375533056
たった1日でとんでもない数だ。
興味がある人はdaysの値を3とか10にしてみよう。
のび太のしてしまった暴挙の恐ろしさがわかる。
コメント