【Python】かんたんなwhile文の書き方【入門第23回】

108, 2019-08-16

目次

while文とは?

こんにちは、narupoです。

今回はPythonのwhile文をやりたいと思います。

for文もwhile文と同じで、繰り返しの作業を自動化する文です。

このwhile文もfor文と同じループ文ですが、for文とは少々変わっています。
しかし、while文は思いのほか使用する場面が多いです。
この記事でwhile文を身に付けておきましょう。


具体的には↓を見ていきます。

  • while文の書き方

  • 無限ループの書き方

  • カウント変数による制御

  • break

  • continue

  • else

while文の書き方

while文は↓のように書きます。

while 条件式:
    実行内容

for文と比べるとずいぶんシンプルだと思います。
まずwhileと書いてそのあとに条件式を書きます。それからコロン(:)を付けて、ループさせたい内容を書きます。

たとえば↓のようなコードはアリです。

:::python
while True:
    print('にゃーん')

無限ループの書き方

先ほどのコードをもう一度見てみましょう。

:::python
while True:
    print('にゃーん')

↑のコードを実行すると永遠に「にゃーん」と出力されます。
↑のコードを実行して、プログラムが止まらない状態になったら、あせらずにキーボードの左下の「Ctrl」キーと「C」キーを同時押ししてください。
そうすれば↓のようにKeyboardInterruptが発生してプログラムを終了できます。

にゃーん
にゃーん
にゃーん
にゃーん
にゃーん
^Cにゃーん
Traceback (most recent call last):
  File "nyan.py", line 2, in <module>
    print('にゃーん')
KeyboardInterrupt

こういう終了条件が無いループを無限ループといいます。
ずばり、while文は無限ループを書くための文と言っても良いでしょう。

無限ループなんて何に使うんだ? という疑問があると思いますが、たとえばゲームなどは無限ループです。
ほかにもWebサーバーなど、長期的に生存するプログラムも中身は無限ループです。
このようにプログラミングでは無限ループを使う機会が思いのほか多いものです。

この無限ループを扱えるようになると、またひとつ作れるプログラムの種類が増えると言っていいでしょう。

みんな大好き無限ループ

カウント変数による制御

while文を制御したい場合はカウント変数を使います。
たとえば↓のようにです。

:::python
i = 0
while i < 4:
    print(i)
    i += 1

↑の例ではまず最初にiというカウント変数を初期化しています。
そしてwhile文の条件式では「i < 4」として、i4以上ならループを終了するようにしています。
そしてwhile文の中ではprintiを出力して、そのあとにiをインクリメント(1増加)させています。
↑のコードの実行結果は↓のようになります。

0
1
2
3

この形のwhile文もわりとよく使います。
この形を変形すればいろいろなwhile文を書けます。
たとえばデクリメントしていくwhile文や、

:::python
i = 4
while i > 0:
    print(i)
    i -= 1

2以上増加していくカウント変数など。

:::python
i = 0
while i < 10:
    print(i)
    i += 2

for文と違う点は、while文ではカウント変数を自分で制御できる点です。
たとえばループ中にカウント変数を減算することも出来ます。
このへんはfor文と違ってwhile文の便利なところです。

break文

while文でもfor文と同じでbreak文を使うことができます。
break文はループから抜け出す命令です。

:::python
while True:
    break

↑のコードは実行してもなにも出力されません。
ループに入った直後にbreakしているからですね。
たとえばカウント変数iをカウントしていくwhile文があるとして、そのi2以上になったらループから抜ける……としたい場合は↓のようにします。

:::python
i = 0
while i < 10:
    if i >= 2:
        break
    print(i)
    i += 1

↑のコードの実行結果は↓のようになります。

0
1

break文はfor文やwhile文などのループ文で非常によく使うので、憶えておきましょう。

continue文

while文でもfor文と同様にcontinue文を使えます。
continue文はループをスキップする命令です。

:::python
i = 0
while i < 4:
    i += 1
    print('カウントォ!')
    if i >= 3:
        continue
    print(i)

↑のコードの実行結果は↓のようになります。

カウントォ!
1
カウントォ!
2
カウントォ!
カウントォ!

i3以上になったらcontinue文が実行され、print(i)がスキップされます。

else文

while文でもfor文と同様にelse文が使えます。
else文は、ループがbreakなどで終了せずに、最後まで完了したときに実行される命令です。
なので↓のコードは、

:::python
i = 0
while i < 4:
    print(i)
    i += 1
else:
    print('おわりました')

↓のような出力になります。

0
1
2
3
おわりました

ループが完了しているのでelse文が実行されています。
いっぽう、途中でbreakした場合は↓、

:::python
i = 0
while i < 4:
    if i >= 2:
        break
    print(i)
    i += 1
else:
    print('おわりました')

↓のような出力になります。

0
1

while文の途中でbreakしているので最後のelse文は実行されません。

おわりに

while文はfor文ほど使いませんが、それでもよく使う文と言えます。
このwhile文を知っておかないと、いざってときに困ります。
「この処理、for文で実現できないんだけどどうすりゃいいんだ?!」
という時にwhile文の存在を思い出してみてください。

次回に続きます。

また見てね

関連動画