大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

実行トレース

実行トレースは、プログラムの一回の実行を文ごとに記録します。プログラムカウンターがどの行にあり、各ステップ後に変数が何を持つかを示します。現在行と状態を合わせると、処理を順に追えます。

プログラムカウンターは、レシピの手順を指す指に似ています。一つ実行して次へ移り、ループでは前の条件へ戻ります。本レッスンは矢印で現在行、状態パネルで変数、コンソールで出力を示します。

実行トレースの仕組み

通常は次の行へ進みますが、while はその順序を変えます。条件が真なら本体へ入り、終わると条件に戻って再確認します。偽なら本体を飛ばして後続の文へ進みます。

本例は n から 1 までを足します。total をゼロにし、n > 0 の間、n を加えてから n を一つ減らします。スライダーが初期入力を決めます。五行のコードは変わらず、そこを通る値だけが変わります。

ステップごとの解説

既定の入力は n = 3 です。

  1. 1 行目:total = 0 が total を作り、0 にします。
  2. 2 行目:while n > 0 で 3 > 0 が真なので、本体へ入ります。
  3. 3 行目:total = total + n が現在値で 0 + 3 を計算し、total を 3 にします。
  4. 4 行目:n = n - 1 で n が 2 になり、2 行目へ戻ります。
  5. 二巡目:2 > 0 は真、total = 3 + 2 = 5、n は 1 になります。
  6. 三巡目:1 > 0 は真、total = 5 + 1 = 6、n は 0 になります。
  7. 2 行目:0 > 0 は偽なので、本体を飛ばします。
  8. 5 行目:print(total) が 6 を出力し、終了します。

矢印は 1–4 行目を進み、三回 2 行目へ戻り、最後に偽の条件から 5 行目へ移ります。戻る動きは通常ステップの 1.5 倍の長さで、方向の変化を見せます。状態パネルは変更された変数を点滅させ、記録は文の実行前の値で 0 + 3 → 3 や 3 > 0 → true を示します。

実行された仕事を数える

非負入力 n では、一回の初期化、n + 1 回の条件確認、2n 文の本体、一回の print で、計 3n + 3 文です。条件確認には最後の偽になる一回も含めます。ソースは五行のまま、トレースが増えます。

入力本体の反復回数実行した文の数出力
n = 1161
n = 33126
n = 662121

ソースは静的なテキストで、トレースは動的な過程です。実際のインタープリターはバイトコード、コールスタック、最適化も扱いますが、この文の順序と状態変化を保ちます。後の関数呼び出しや再帰も、このモデルの上で理解できます。

境界ケース

  • n = 0:最初から 0 > 0 が偽で、本体を実行せず 0 を出します。2 行目から 5 行目へ進み、本体より前に条件を調べることが分かります。
  • n = 1:一巡だけで、1 を足し、0 へ減らし、次の確認で終了します。
  • スライダーの上限は n = 6:さらに大きな正数も同じ五行を使い、反復が増えて total が大きくなります。

よくある間違い

  • n = n - 1 を忘れる。 正の入力では n が 0 にならず、条件が真のままで終了しません。
  • while を if と同じに読む。 if のブロックは最大一回で先へ進み、while は毎回条件へ戻ります。
  • 代入後の値で右辺を計算する。 total = total + n は旧値を読んでから書きます。ここでは 0 + 3 であり、3 + 3 ではありません。
  • プログラムカウンターを普通の変数と考える。 実行位置を記録するもので、このプログラムのデータとは別なので状態パネルには出ません。

このレッスンでの簡略化

実際の Python インタープリターはバイトコードを実行し、フレームを管理します。ソースファイルの上を矢印が動くわけではありません。図が示すのは、コードを読んでデバッグする際の意味の層です。文が制御フローに従って作用し、各ステップで状態が変わります。