Pythonの「while True:」による無限ループの解説

このページでは、while文で「while True:」と書いた時の無限ループの書き方と、その注意点について、図解を多く入れながら解説していきます。ぜひ参考にして頂ければと思います。

while 文の基本
while文の基本については「Pythonのwhile文による繰り返し処理(whileループ)の基本」で解説しています。先に目を通しておきましょう。
目次

1. while True(無限ループ)とは

while文は「ある条件を満たす間(Trueの間)、指定の処理を繰り返す」というものです。つまり条件が常にTrue(=真)であれば、指定の処理を永遠に繰り返す無限ループになるということです。Pythonでは、そのような無限ループを作りたい時は、次のように「while True」と書きます。

In [ ]:
while True:
    処理文

これで常に条件がTrue(=真)となり、下図のような無限ループになります。

ただし、このまま例えば次のようなコードを書くと、0から1ずつ増えていく数値を永遠に出力し続けてしまいます。

In [1]:
num = 0

while True:
    print(num)
    num += 1
0
1
2
3
4
5
6
7
8
9
10
...(以下無限に続く)

この処理の流れは下図の通りです。

このままでは永遠にwhileブロックの次に進むことはできませんし、コンピューターに多大な負担をかけてしまいます。

そのため、無限ループは必ずbreak(中断条件)とセットで使います。次のコードでは、先ほどのものに中断条件を入れたので、ちゃんと無限ループが終了しています。ちなみに、breakについては「Pythonのwhile文のbreakを使ったループ条件の作り方」でご確認ください。

In [2]:
num = 0

while True:
    print(num)
    num += 1
    if num == 6:
        break
0
1
2
3
4
5

この処理の流れは下図の通りです。

2. PythonでTrueと判定されるケース

ここまでは条件式の「While True:」=「無限ループ」として解説してきました。これは「whileループの繰り返し条件が常にTrueですよ」という意味です。そのため無限ループになるのですね。

さて、実は常にTrueと判定されるケースはこの限りではありません。これを知っておかないと、意図せず無限ループを作ってしまうかもしれないので、ここで解説しておきたいと思います。

通常、条件式を書くときは比較演算子を使います。比較演算子は実行すると、以下のように必ずTrueかFalseを返します。

In [1]:
print(1 == 1)
print(1 != 1)
print(1 < 2)
True
False
True

これは分かりやすいので混乱しないですね。

しかし、奇妙に聞こえるかもしれませんが、実は、オブジェクトにもTrueかFalseかのブール値があるのです。そしてデータのあるオブジェクトは全て、以下のようにTrueと判定されます。

In [1]:
list = [1, 2, 3]
str = '1, 2, 3'

print(bool(list))
print(bool(str))
True
True

つまり「while list:」と書いたり、「while str:」と書いたり、「while 1:」と書いたりした時も、それらは「while True:」と同じ意味になるのです。

比較演算子以外でFalseと判定されるのは、次の4つのケースのみです。

  • ブール値としてのFalse
  • None(null)
  • 数値の0(整数:0、浮動小数点数:0.0、複素数:0j)
  • 空の文字列、リスト、タプル、辞書

以下のコードで実際に確認してみましょう。

In [2]:
print(bool())  #  Noneの場合
print(bool(0))  #  数値の0(浮動小数点数含む)の場合
print(bool(''))  #  空の文字列の場合
print(bool([])) #  空のコンテナ(リスト、タプル、辞書など)の場合
False
False
False
False

このため、例えば「while 0:」や「while ”:」などと書くと、whileループの条件式は常にFalseとなるのです。

これと同じことは「Pythonのif文を使った条件分岐の基本と応用」でさらに詳しく解説しているので、一緒に読んで、ぜひ理解を深めておきましょう。

3. 意図せぬ無限ループを中断する方法

無限ループの注意点について解説しましたが、それでももし、意図せず無限ループになってしまった場合は、「ctrl + c」で KeyboardInterruptという強制終了をすることができますので覚えておきましょう。

In [1]:
num = 1

while True:
    print(num)
    num += 1
1
2
3

...途中省略

44692
44693
44694
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-2-c73bf184123c> in <module>
      3 while True:
      4     print(num)
----> 5     num += 1

KeyboardInterrupt: 

4. まとめ

Pythonでは「while True:」と書くと無限ループになります。無限ループがあると、コードが先に進めなくなるため、ほぼbreakとセットで使うということを覚えておきましょう。

また、Pythonのブール値(True or False)の判定についても抑えておきましょう。Pythonではオブジェクトもブール値があり、Falseと判定されるのは4つのケースだけです。

これらの点を理解した上で、ぜひ無限ループをマスターしてください!



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる