Pythonでアルゴリズム「シェル・ソート」(5):While文ってif文とどう違うの?
はい、こんにちは!Pythonで「シェルソート」シリーズ、本日は、やっと!?コードの詳細に入っていきます🙂。前回は、コードの全体像を眺めて、ループが3つあることを確認しましたね。骨組みは分かりました。
ここから、個々のパーツを見ていきます。「シェルソート」のコードは、簡単ではありません。が!いつものとおり、「困難は分割する(byデカルト先生)」の精神で、コードを解剖しましょう!そうすれば、きっと「ユリイカ!(分かった)」な瞬間が来るはず。
よし、レッツ・ゴウ!
一番最初のループ:間隔は半分になり続ける
最初に、迷子にならないよう、コードの全体像を再掲しておきましょう。そして、本日、ググっとフォーカスするのは、一つ目の赤枠のWhileループであります😆。
あ、そういえば、このブログでは、whileループでなく、forループばかり扱ってきましたね…。ここで、Whileとは何か簡単に理解しておきましょう。
while文によるループの仕組み
繰り返しの処理を記述するために、for文だけでなく、while文を使うことができます。構文は、次の通りです。
ふむ、ちょっとif文みたいですね。でも、if文と違うのは、
・elifがないこと
・真のときの処理が繰り返しであること
ですね。ちなみにif文同様、elseに当たる処理が不要なら、省略できます。今回のコードもそれにあたりますね。
ここでは、while文に深入りせず先に進みましょう。
間隔が正の値である限り、ループする
よし、では、くだんのWhile文がどうなっているのか確認します。その条件式は、「Gapが0より大きいならループする」となっています。
ということは、ループする都度、Gapが減り続けなければ、ループが終わらない!という事態が発生しますね。それは、どこに書いてあるでしょうか。
「ここです!😄」
そこです!あ、でも右辺のスラッシュ2つって何でしたっけ?そうだ、割り算をした結果の「商」が戻されるのでしたね。「余り」は無視です。
Gapは、グループ化するときの要素間隔で、その初期値は、「リストの要素数」すなわち「4」でした。であるならば、Gapの値は、ループする都度、4→2→1→0となることが分かります。Gapが「0」になると、while文の条件式を満たさくなるので、ループ内処理はそれ以上行われず、ループ終了となります。
はい、これで一番外側のループの解説は終了です。これは思ったより分かりやすかったですね。おめでとうございます!「小ボス」を倒しました!
先に続く、あと2つのループ、「中ボス」「ラスボス」は手ごわいですよ…😅。ですから、エネルギーをセーブするためにもいったんここで切りましょう。ふぃ。
では、ビーダゼーン!
※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。