【Python】while文の使い方、for文との使い分け

image

while文とは


while文の使い方

while 条件式:
    処理
    ...

たとえば、10以下の総和を計算するプログラムは次の通りです。

i = 0
s = 0
while i < 10:
    i += 1
    s += i
print(s)
# 55

for文との使い分け

while文でできることの大半はfor文でもできます。 また、for文でできることの大半はfor文でもできます。 これらが2つ存在するのは、 うまく使い分けることでコードが簡潔になるからです。 forとwhile文は基本的には次のような使い分けがなされています。

  1. ループ外で終了するタイミングが決まっている場合はfor文
  2. ループ内の処理によって、終了するタイミングが決まる場合はwhile文

1.は一般的に良く行われるループ処理ですが2.はあまり見かける機会はありません。 2.の使用例として挙げられるのはループ内にユーザー入力があるときが考えられます。 ユーザーの入力によって状態が変わるのでwhile文でループを作って、 何らかの処理が行われた場合、後述のbreak文を使いループを抜けるのをよく見ます。

ループ内の制御


while break

break文は、while文と頻繁に用いられます。 break文はループを抜けるときに用いられます。

i = 0
while True:
    if 5 < i:
        break
    i += 1
print(i)
# 6

このコードは、while True:のところをだけ見ると 無限ループになっています。 しかし、このコードはiが5より大きくなったら break文でループを抜けるので無限ループにはなりません。 このように無限ループを作ってある状態になったら ループを抜けるといった形で良く用いられます。

while continue

continue文は処理を飛ばす制御文です。 ある状態の場合のみ処理をパスしたいという処理を書くときに使われます。 たとえば、5以下の奇数のみの総和を求めるコードをwhile文でかくと次のようになります。

i = 0
s = 0
while True:
    i += 1
    if 5 < i:
        break
    if i % 2 == 0:
        continue
    s += i
print(s)

とはいえ、if elseを使ったほうが簡潔なことが多いので使う機会は少ないかもしれないです。 ループ内の処理が長いときや、ネストが深くなりすぎるときはcontinueを使ったほうが 見やすくなるケースがあります。

do whileは?


他の言語に慣れ親しんだ方だと「do whileは?」と思う方もいらっしゃると思います。 しかし、Pythonにはdo whileがありません。 理由はwhile文とbreak文を併用することでdo whileが実現できるからです。 条件式とbreakをループの最後に記述することで実現できます。

while True:
    処理
    if 条件式:
        break

while else


次のような書き方がPythonには存在します。

while 条件式:
    処理A
else:
    処理B

条件式が真である限り処理Aが実行されます。 条件式が偽になったばあいは、処理Bが1回のみ実行されます。 この文法は直観的にわかりにくいのであまり使われることはありません。

i=0
while i < 5:
    i += 1
    print(i)
else:
    print(i)

実行結果

1
2
3
4
5
5

コメント

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