見出し画像

Pythonでアルゴリズム「シェル・ソート」(5):While文ってif文とどう違うの?

はい、こんにちは!Pythonで「シェルソート」シリーズ、本日は、やっと!?コードの詳細に入っていきます🙂。前回は、コードの全体像を眺めて、ループが3つあることを確認しましたね。骨組みは分かりました。

ここから、個々のパーツを見ていきます。「シェルソート」のコードは、簡単ではありません。が!いつものとおり、「困難は分割する(byデカルト先生)」の精神で、コードを解剖しましょう!そうすれば、きっと「ユリイカ!(分かった)」な瞬間が来るはず。

よし、レッツ・ゴウ!

一番最初のループ:間隔は半分になり続ける

最初に、迷子にならないよう、コードの全体像を再掲しておきましょう。そして、本日、ググっとフォーカスするのは、一つ目の赤枠のWhileループであります😆。

あ、そういえば、このブログでは、whileループでなく、forループばかり扱ってきましたね…。ここで、Whileとは何か簡単に理解しておきましょう。

while文によるループの仕組み

繰り返しの処理を記述するために、for文だけでなく、while文を使うことができます。構文は、次の通りです。

while 条件式:
    条件式が真のときに繰り返す処理
else:
    条件式が偽のときに実行する処理

ふむ、ちょっとif文みたいですね。でも、if文と違うのは、
・elifがないこと
・真のときの処理が繰り返しであること

ですね。ちなみにif文同様、elseに当たる処理が不要なら、省略できます。今回のコードもそれにあたりますね。

ここでは、while文に深入りせず先に進みましょう。

間隔が正の値である限り、ループする

よし、では、くだんのWhile文がどうなっているのか確認します。その条件式は、「Gapが0より大きいならループする」となっています。

ということは、ループする都度、Gapが減り続けなければ、ループが終わらない!という事態が発生しますね。それは、どこに書いてあるでしょうか。

「ここです!😄」

そこです!あ、でも右辺のスラッシュ2つって何でしたっけ?そうだ、割り算をした結果の「商」が戻されるのでしたね。「余り」は無視です。

Gapは、グループ化するときの要素間隔で、その初期値は、「リストの要素数」すなわち「4」でした。であるならば、Gapの値は、ループする都度、4→2→1→0となることが分かります。Gapが「0」になると、while文の条件式を満たさくなるので、ループ内処理はそれ以上行われず、ループ終了となります。

はい、これで一番外側のループの解説は終了です。これは思ったより分かりやすかったですね。おめでとうございます!「小ボス」を倒しました!

先に続く、あと2つのループ、「中ボス」「ラスボス」は手ごわいですよ…😅。ですから、エネルギーをセーブするためにもいったんここで切りましょう。ふぃ。

では、ビーダゼーン!

※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。





この記事が気に入ったらサポートをしてみませんか?