こんにちは。IT/経済ジャーナリストで投資家の渡辺です。
前回は文字を続けて入力して、複数行のテキストファイルを作ってみました。
<過去記事>
・whileループとファイル書き込みで、超シンプルなテキストエディタを作ってみる
キーボードから入力した文字がテキストファイルとして保存されています。
超原始的ながら、ワープロ(テキストエディタ)です。
ところが、いざ作成されたテキストファイルを見ると、最後に「///」が入ってしまっていて、ちょっと格好悪いです。
ということで、「///」がファイルに書き込まれる前に、ループから脱出できないか考えてみましょう。
break文でループの途中でも脱出できる
実は、whileやforでのループの途中で、外に出るための命令が用意されています。
それは 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ループでも使える。
コメント
[…] ・break文で用が済んだらループからさっさと脱出できる […]