Python入門
第7回.while文とデバッグ(ステップイン)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-09-15

第7回.while文とデバッグ(ステップイン)


プログラムとは処理手順であり、突き詰めれば条件分岐しながら繰り返し処理を行うものです。
Pythonでの繰り返し処理のうち、今回はwhile文の説明になります。
for文に比べると使用頻度は落ちると思いますが、基本として身に付けておくべきものです。


while文で、もし条件を満たすことがないと永久ループしてしまいます
そうならない為にもデバッグがきちんとできないと困ります。
IDEでのデバッグのやり方を簡単に説明しておきます。

目次

while文の構文

while文は、条件式が真(True)である間は処理を繰り返します。
条件式が偽(False)となった時点でループを抜けます。

while 条件式:
    繰り返す処理1
    if スキップ条件:
        continue
    if 終了条件:
        break
    繰り返す処理2
else:
    最後に一度だけ実行

continue
break
else:
これらは省略可能です。


whileの例文

単純なカウントアップ

n = 0
while n < 5:
    print(n)
    n += 1


Python while文 デバッグ ステップイン


変数nを0から1ずつカウントアップしていき、nが5になった時点(条件が偽となった時点)でループが終了します。

これは、for文とrange()関数を使った以下と同じです。

for n in range(5):
    print(n)


インクリメント、デクリメント

1ずつ増加させることをインクリメントと言います。
逆に1ずつ減らす場合はデクリメントと言います。
Pythonでは、
i += 1
i -= 1
このように記述します。
以下のように書いても構いませんが、
i = i + 1
i = i - 1
インクリメント・デクリメントの場合は、その為の記述を使ったほうがよいでしょう。

+=-=累算代入演算子と呼びます。
上記では、+1,-1を例としましたが、もちろん+2,-2等の増減値は任意の数値が指定できます。

無限ループ

n = 0
while True:
    print(n)
    n += 1
    if n >= 5:
        break
条件式にTrueを指定しているので、while文は無限にループします。
終了条件をif文で書いて、終了条件を満たしたらbreakでループを抜けるようにします。


for文をwhileで書き換えると

for word in ["python","range","list","tuple"]:
    print(word)
このlistをfor文で処理しているスクリプトをwhile文で書き変えると、

lst = ["python","range","list","tuple"]
i = 0
while i < len(lst):
    print(lst[i])
    i += 1
Python while文 デバッグ ステップイン


len()は組み込み関数です。
len()関数は、オブジェクトの長さ (要素の数) を返します。

listの特定インデックスの値を取得する場合は、
変数名{インデックス}
このように記述します。
listについては、後の章で詳しく解説します。


IDLEのデバッグ

この「Python入門」では、Visual Studioを使って記載していますが、
標準添付のIDEであるIDLEについても最低限の説明をしておきます。

shellの起動と新規スクリプトファイルの作成

まずはshellを起動します。
作成済みのスクリプトがあれば「Open」してください。
無ければ、「New File」で作成します。

Python while文 デバッグ ステップイン

エディターが別ウィンドで開きますので、そこにスクリプトを書き込みます。

Python while文 デバッグ ステップイン

「Save」または「Save As」で保存してください。

Python while文 デバッグ ステップイン

デバッガーの起動

shellに戻って、
「Debug」→「Debugger」

Python while文 デバッグ ステップイン

Python while文 デバッグ ステップイン

「source」「Globals」にもチェックを付けましょう。

デバッグの開始

エディターのウィンドウで、
「Run」→「Run Module」
ショートカットはF5

Python while文 デバッグ ステップイン

Python while文 デバッグ ステップイン

「Go」「Step」「Over」「Out」「Quit」
適宜ボタンを使い分けます。
「Over」をクリックすると、エディター画面の現在行が動きます。
※「Step」ではrun.pyの内部に入ってしまうのでここでは「Over」を使ってください。

Python while文 デバッグ ステップイン

一番下に変数nが表示されています。
「Over」を2回進めると、

Python while文 デバッグ ステップイン

一番下の変数nが1になったのが確認できます。

「Step」で進むと、run.pyの中に入りステップで進むことができます。

Python while文 デバッグ ステップイン

さすがに、いきなりこれを見ても何も分からないので、当面は「Over」で進めば良いでしょう、
ただし、今後defで関数を作った時には「Step」で進める必要もでてきますので、違いは理解しておきましょう。

Go ブレークポイントまで実行。
ブレークポイントがなければ最後まで実行される。
Step 現在行を実行し次の行で停止します。
現在行に関数呼び出しがある場合はその関数の中に入ります。
Over 現在行を実行し次の行で停止します。
現在行に関数呼び出しがあっても関数の中には入らずに進みます。
Out 現在の関数の外に出ます。
Stepで入ってきた場合は、元の現在行の次に移ります。
Quit デバッグを終了します。

ブレークポイントの設定

ブレークポイントは、実行をその行で一旦停止させる場合に使います。
ブレークポイントを付けたい行で右クリックします。

Python while文 デバッグ ステップイン

SetとClearがありますので、適宜設定解除してください。

Visual Studioのデバッグ

プロジェクトにスクリプトファイルを追加する

メニューの「プロジェクト」→「新しい項目の追加」

Python while文 デバッグ ステップイン

または、「ソリューション エクスプローラー」で、プロジェクトを右クリックして、

Python while文 デバッグ ステップイン
Python while文 デバッグ ステップイン

「追加」→「新しい項目」

Python while文 デバッグ ステップイン


Python while文 デバッグ ステップイン

「空のPythonファイル」を選択してください。
もちろん、既存のスクリプトファイルがあれば、「既存の項目」で取り込むことができます。
名前は適宜変更してください。


Python while文 デバッグ ステップイン

スクリプトファイル(.py)が追加されました。

スタートアップ プロジェクトに設定

複数のスクリプトファイルが存在する場合、どのスクリプトを実行するかを選択する必要が出てきます。

メニュー「プロジェクト」→「スタートアップ プロジェクトに設定」

Python while文 デバッグ ステップイン

または、「ソリューション エクスプローラー」で、プロジェクトを右クリックして、

Python while文 デバッグ ステップイン

「スタートアップ ファイルとして設定」

これで、「開始」で実行するスクリプトとして設定されます。

ステップ インの開始

Python while文 デバッグ ステップイン

「デバッグの開始(F5)」では、最後まで一気に進んでしまいます。
「ステップ イン(F11)」で1行ずつ進めます。

Python while文 デバッグ ステップイン

黄色の行はまだ実行されていません。
黄色になっている行が、これから実行する行です。

F11を2回押すと、
※whileの行には停止しません。

Python while文 デバッグ ステップイン

マウスカーソルを変数nの上に乗せると、

Python while文 デバッグ ステップイン

変数の値が表示されます。
もう一度F11を押して、変数nの値を見てみると、

Python while文 デバッグ ステップイン

変数nの値が変化しているのが分かります。

途中でデバッグを終了したい場合は、

Python while文 デバッグ ステップイン

Python while文 デバッグ ステップイン

「デバッグの停止」これで停止できます。

いろいろなステップ実行

機能 キー操作 説明
Continue F5 次のブレークポイントに到達するまでコードを実行します。
[ステップ イン] F11 次のステートメントを実行して停止します。
次のステートメントが関数の呼び出しの場合、呼び出されている関数の最初の行でデバッガーが停止します。
[ステップ オーバー] F10 次のステートメントを関数の呼び出しを含めて実行 (すべてのコードを実行) し、戻り値をすべて適用します。
ステップ オーバーでは、デバッグする必要のない関数を簡単にスキップすることができます。
[ステップ アウト] Shift+F11 現在の関数の終わりまでコードを実行し、呼び出し元のステートメントに戻ります。
このコマンドは、現在の関数の残りの部分をデバッグする必要がない場合に便利です。
カーソル行の前まで実行 Ctrl+F10 エディターのキャレット位置までコードを実行します。
このコマンドを使用すると、デバッグする必要がないコードのセグメントを簡単にスキップすることができます。
次のステートメントの設定 Ctrl+Shift+F10 コードの現在の実行ポイントを、キャレットの位置に変更します。
このコマンドを使用すると、エラーがある場合や望ましくない副作用があることがわかっている場合などに、コードのセグメントが実行されないようスキップすることができます。
次のステートメントの表示 Alt+Num?* 次に実行されるステートメントに戻ります。
このコマンドは、コード内のさまざまな場所をチェックしたために、デバッガーがどこで停止しているかわからなくなってしまった場合に便利です。

ステップインは、
現在行を実行し次の行で停止します。
現在行に関数呼び出しがある場合はその関数の中に入ります。
ただし、Visual Studioのステップインは、組み込み関数の中には入りません。

ステップ オーバーは、
現在行を実行し次の行で停止します。
現在行に関数呼び出しがあっても関数の中には入らずに進みます。
今後defで関数を作るまでは「ステップ イン」と「ステップ オーバー」を使い分ける必要はありません。

ブレークポイントの設定

実行を指定位置で一時停止させることができます。
「実行(F5)」または「開始」を実行しても、ブレークポイントが設定されている行で一旦停止します。

ブレークポイントを設定したい行を選択し(入力カーソルを置く)

Python while文 デバッグ ステップイン

ショートカットはF9です。
マウスでも設定できます。

Python while文 デバッグ ステップイン

Python while文 デバッグ ステップイン

ブレークポイントが設定されると、(既定の設定なら)茶色反転になります。


デバッグのウィンドウ

Python while文 デバッグ ステップイン

機能が非常に沢山あります。
Microsoftの以下のページを参考にしてください。
イミディエイト ウィンドウ
実行途中(ステップインやブレークポイントで止まった時)に、
変数の値を確認したり、その場で式を評価したりすることができます。

?に続けて変数名や式を入れてEnterします。

Python while文 デバッグ ステップイン


ローカル ウィンドウ
現在のスコープ内のすべての変数が表示されます。
スコープとは、現在実行中のスクリプトの適用範囲になります。
defでの関数定義を説明する時に詳しく解説します。

Python while文 デバッグ ステップイン


自動変数
現在のステートメントに近い変数と式が表示されます。

Python while文 デバッグ ステップイン




同じテーマ「Python入門」の記事

第4回.数値計算(四則演算)
第5回.if文とインデントによるブロック
第6回.for文とイテラブルオブジェクト
第7回.while文とデバッグ(ステップイン)
第8回.文字列操作(str型)
第9回.リスト(list型、配列)
第10回.タプル(tuple型、イミュータブル)
第11回.辞書(dict型)
第12回.組み込み関数一覧
第13回.関数の定義(def文)と引数
第14回.関数内関数(関数のネスト)とスコープ


新着記事NEW ・・・新着記事一覧を見る

CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ