【Python入門】break文で用が済んだらループからさっさと脱出できる

重力圏からの脱出 プログラミングの基礎

こんにちは。IT/経済ジャーナリストで投資家の渡辺です。

前回は文字を続けて入力して、複数行のテキストファイルを作ってみました。

<過去記事>

whileループとファイル書き込みで、超シンプルなテキストエディタを作ってみる

キーボードから入力した文字がテキストファイルとして保存されています。

超原始的ながら、ワープロ(テキストエディタ)です。

ところが、いざ作成されたテキストファイルを見ると、最後に「///」が入ってしまっていて、ちょっと格好悪いです。

ということで、「///」がファイルに書き込まれる前に、ループから脱出できないか考えてみましょう。

重力圏からの脱出

 

break文でループの途中でも脱出できる

実は、whileforでのループの途中で、外に出るための命令が用意されています。

それは break 文です。

通常はループの中で if文で条件を判定し、脱出すべき条件が整えば、ループから脱出して次の処理に進む、という使い方をします。

条件が合致しない場合は、そのまま処理が継続されます。

ファイルに書き込む前に抜け出す

ファイルに書き込む前に判定したいので、キーボードから文字を入力したすぐ直後に、if文を置きます。

以下の赤字部分のようになります。

これらの処理はwhileループの中なので、字下げを忘れないでください。

while inbuf != “///”:
    inbuf = input(“–> “)

    if inbuf == “///”:
        break

    myfile.write(inbuf)
    myfile.write(‘\n’)

whileループの中は半角スペース4個分ほど字下げ(インデント)していますが、if文の中については、そのまた内側になるので、さらにスペース4個分、先頭から見ると合計スペース8個分下げます。

最後に、これまで書いたコード全体をここに記します。

# coding: utf-8

outfile = input(“ファイル名を指定してください:”)

myfile = open(outfile, ‘w’)

inbuf = ‘ ‘ #あらかじめ半角スペースを入れておく

while inbuf != “///”:
    inbuf = input(“–> “)

    if inbuf == “///”:
        break
    myfile.write(inbuf)
    myfile.write(‘\n’)

myfile.close()

 

「///」が出力されないか、動作確認

いつものように「Run ‘study00’」を実行して、このプログラムを実行してみてください。

またまた、test.txtというファイル名にして、5行ほど打ち込みました。

入力が終わったら、「///」を入力してプログラムを終了させます。

左側のファイル一覧の一番下にある「Scratches and Consoles」からtest.txtの内容を表示してみます。

最終行はきれいになりました。

このif文で条件を確認してループから抜けるのは、for文でも同様に使えます。

ちなみに、whileの中でも変数をチェックしていますが、結局ここは使わないので、ずっとループが回るように、以下のように無限ループにしておいても構いません。

while True:

または単なる数字とかでも、1は1なのでずっと「真」と判定され、ループが回り続けます(ゲリラ的な方法なので推奨しませんが)。

while 1:

条件が常に「True」(真)なので、内部のif文とbreakが実行されるまでは、ずっとループの処理が繰り返されます。

普通にアプリを動かす分にはあまり影響ありませんが、whileの直後とブロックの中のif文で2回判定処理をするので、シビアな性能を追求するような場合は、while Trueとして判定処理を1回にした方が、少し処理速度がアップします。

<今日の要約ノート>

break文を使えば、while文によるループ(繰り返し)から途中で抜け出すことができる。if文でチェックして、抜ける条件になったらbreak文で抜けるのがよくある使い方。whileだけでなくforループでも使える。

 

コメント

  1. […] ・break文で用が済んだらループからさっさと脱出できる […]

タイトルとURLをコピーしました