Python基礎講座 #14 while反復文 (while loop)

読了 3分

Pythonはwhile loopとfor loopの2つの反復文を提供しますが、今回はwhile反復文について勉強していきましょう。

反復文は、あるコードを何度も繰り返し実行したいときに使われますが、while反復文の基本形はテストブロックと実行ブロックに分かれており、テストブロックが先に実行されて結果値が真であれば実行ブロック内のコードを実行し、テストブロックの結果が偽になるまで繰り返し実行されます。

下のシンプルなwhile文のコードを実行するとどんな結果が出るでしょうか。

# while 反復文はテストブロックの結果が偽になるまで繰り返し実行されます。

i = 1

while True:  # テストブロック
    print(i)  # 実行ブロック

💡 今日のヒント

無限ループを繰り返すプログラムは、Ctr + Cを押してプログラムを終了する必要があります。

テストブロックの結果が常にTrueにハードコーディングされているため、ループから抜け出せず無限ループを回りながら1を出力し続けます。

逆に、次のようなコードを実行すると、最初のテストの結果がFalseなので、実行ブロックは1度も実行されません。

i = 1

while False:
    print(i)

while文を使って1から10まで出力したい場合は、次のようなコードを書いてください。

i = 1

while i <= 10:
    print(i)
    i += 1
1
2
3
4
5
6
7
8
9
10

今度はリストアイテムを1つずつ出力してみましょう。

my_list = ['one', 'two', 'three', 'four', 'five']

index = 0
last_index = 4

while index <= last_index:
    print(my_list[index])
    index += 1
one
two
three
four
five

一般的にプログラムを作るときは、my_listのようなデータは上のコードのようにハードコーディングされたデータを使わず、データベースや外部データを使う場合が多いです。したがって、コーディング時点ではアイテムの数がいくつなのか分からない場合が多くあります。そのため上のコードには1つの問題点がありますが、リストアイテムの数が減ったり増えたりすると、ハードコーディングされたlast_indexの値を修正しなければならないという点です。そこで下のコードのようにテスト条件にlen関数を使って、リストの個数を確認した値を適用するのが一般的な方法です。

my_list = ['one', 'two', 'three', 'four', 'five']

index = 0
last_index = len(my_list) - 1

while index <= last_index:
    print(my_list[index])
    index += 1

場合によっては、条件が常にTrueの条件文を使って意図的に無限ループを使うこともあります。プログラムが実行されている間、無限ループを実行して1秒に1回時間を出力するコードを作ってみましょう。

from datetime import datetime
import time

while True:
    print(datetime.now())
    time.sleep(1)
2023-03-18 15:12:12.176344
2023-03-18 15:12:13.188636
2023-03-18 15:12:14.201926
2023-03-18 15:12:15.216212
2023-03-18 15:12:16.216538
2023-03-18 15:12:17.228829
2023-03-18 15:12:18.240128
2023-03-18 15:12:19.254411
2023-03-18 15:12:20.260723
...

今度は無限ループを使って、ユーザーからパスワードを入力してもらうプログラムを作ってみましょう。正しいパスワードを入力しない限り、while文の次のコードは実行されません。正しいパスワードが入力されると、breakキーワードがwhile文を終了させ、while文の次のコードが実行されます。

password = '1234'
balance = 10000

while True:
    user_input = input('[入力] パスワードを入力してください: ')

    if user_input != password:
        print('パスワードが間違っています。\\n')
    else:
        print('ログインに成功しました。')
        break

print('お客様の銀行残高は {} です。'.format(balance))
[入力] パスワードを入力してください: 123
[入力] パスワードを入力してください: 111
パスワードが間違っています。

[入力] パスワードを入力してください: 123
パスワードが間違っています。

[入力] パスワードを入力してください: 1234
ログインに成功しました。
お客様の銀行残高は 10000 です。

while反復文の勉強はここで終えて、次の講座ではfor文 (for loop) について勉強していきましょう。

X