序章

コンピュータプログラムは、タスクの自動化と繰り返しに使用するのに最適なので、そうする必要はありません。 同様のタスクを繰り返す1つの方法は、ループを使用することです。 このチュートリアルでは、Pythonのwhileループについて説明します。

whileループは、指定されたブール条件に基づいてコードの繰り返し実行を実装します。 whileブロックにあるコードは、whileステートメントがTrueと評価される限り実行されます。

whileループは、条件付きステートメントの繰り返しと考えることができます。 ifステートメントの後、プログラムはコードを実行し続けますが、whileループでは、条件がFalseになるまで、プログラムはwhileステートメントの先頭に戻ります。

特定の回数実行されるforループとは対照的に、whileループは条件付きであるため、コードを繰り返す回数を知る必要はありません。

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

Whileループ

Pythonでは、whileループは次のように構成されます。

while [a condition is True]:
    [do something]

実行されていることは、評価されている条件が真でなくなるまで実行され続けます。

whileループを実行する小さなプログラムを作成しましょう。 このプログラムでは、ユーザーにパスワードの入力を求めます。 このループを通過している間、2つの可能な結果があります:

  • パスワードである場合、whileループは終了します。
  • パスワードが正しくない場合、whileループは実行を継続します。

情報:このチュートリアルのサンプルコードに従うには、python3コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。

選択したテキストエディタでpassword.pyというファイルを作成し、変数passwordを空の文字列として初期化することから始めます。

password.py
password = ''

空の文字列は、whileループ内でユーザーからの入力を取り込むために使用されます。

次に、whileステートメントをその条件とともに作成します。

password.py
password = ''

while password != 'password':

ここで、whileの後に変数passwordが続きます。 変数passwordが文字列password(後でユーザー入力に基づく)に設定されているかどうかを確認していますが、任意の文字列を選択できます。

これは、ユーザーが文字列passwordを入力すると、ループが停止し、プログラムがループ外のコードを実行し続けることを意味します。 ただし、ユーザーが入力した文字列が文字列passwordと等しくない場合、ループは続行されます。

次に、whileループ内で何かを実行するコードのブロックを追加します。

password.py
password = ''

while password != 'password':
    print('What is the password?')
    password = input()

whileループ内で、プログラムはパスワードの入力を求めるprintステートメントを実行します。 次に、変数passwordが、input()関数を使用してユーザーの入力に設定されます。

プログラムは、変数passwordが文字列passwordに割り当てられているかどうかを確認し、割り当てられている場合は、whileループを終了します。 それが起こったときのために、プログラムに別のコード行を与えましょう:

password.py
password = ''

while password != 'password':
    print('What is the password?')
    password = input()

print('Yes, the password is ' + password + '. You may enter.')

最後のprint()ステートメントはwhileループの外側にあるため、ユーザーがパスワードとしてpasswordを入力すると、ループの外側にある最後の印刷ステートメントが表示されます。

ただし、ユーザーがpasswordという単語を入力しない場合、最後のprint()ステートメントに到達することはなく、無限ループに陥ります。

無限ループは、プログラムが1つのループ内で実行を続け、ループを離れることがない場合に発生します。 コマンドラインで無限ループを終了するには、CTRL + Cを押します。

プログラムを保存して実行します。

  1. python password.py

パスワードの入力を求められたら、さまざまな入力を使用してパスワードをテストできます。 プログラムからの出力例は次のとおりです。

Output
What is the password? hello What is the password? sammy What is the password? PASSWORD What is the password? password Yes, the password is password. You may enter.

チェックする前に文字列関数を使用して文字列をすべて小文字に変換しない限り、文字列では大文字と小文字が区別されることに注意してください。

Whileループを使用したプログラム例

whileループの大まかな前提を理解したところで、whileループを効果的に使用するコマンドライン推測ゲームを作成しましょう。 このプログラムがどのように機能するかを最もよく理解するには、条件ステートメントの使用およびデータ型の変換についても読む必要があります。

まず、選択したテキストエディタでguess.pyというファイルを作成します。 ユーザーが推測できるようにコンピューターで乱数を生成する必要があるため、importステートメントを使用してimport randomモジュールを作成します。 このパッケージに慣れていない場合は、Pythonドキュメントから乱数の生成について詳しく知ることができます。

guess.py
import random

次に、ランダムな整数を変数numberに割り当て、ゲームが難しくなりすぎないように、1から25(両端を含む)の範囲に保ちます。

guess.py
import random

number = random.randint(1, 25)

この時点で、whileループに入り、最初に変数を初期化し、次にループを作成できます。

guess.py
import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')

    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess == number:
        break

変数number_of_guessesを0に初期化したので、ループが繰り返されるたびに変数を増やして、無限ループが発生しないようにします。 次に、whileステートメントを追加して、number_of_guessesが合計5つに制限されるようにしました。 5回目の推測の後、ユーザーはコマンドラインに戻ります。今のところ、ユーザーが整数以外のものを入力すると、エラーが発生します。

ループ内に、print()ステートメントを追加して、ユーザーに数値の入力を求めます。これは、input()関数で取り込んで、guess変数に設定しました。 次に、guessを文字列から整数に変換しました。

ループが終了する前に、number_of_guesses変数も1増やして、ループを5回繰り返すことができるようにします。

最後に、条件付きのifステートメントを記述して、ユーザーが作成したguessが、コンピューターが生成したnumberと同等であるかどうかを確認し、同等である場合はを使用します。 ]breakステートメントをループから抜け出します。

プログラムは完全に機能しており、次のコマンドで実行できます。

  1. python guess.py

それは機能しますが、現在、ユーザーは自分の推測が正しいかどうかを知ることはなく、正しいかどうかを知らなくても5回完全に推測することができます。 現在のプログラムの出力例は次のようになります。

Output
Guess a number between 1 and 25: 11 Guess a number between 1 and 25: 19 Guess a number between 1 and 25: 22 Guess a number between 1 and 25: 3 Guess a number between 1 and 25: 8

ループの外側にいくつかの条件ステートメントを追加して、ユーザーが数値を正しく推測するかどうかについてフィードバックを受け取るようにします。 これらは、現在のファイルの最後に配置されます。

guess.py
import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')
    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess == number:
        break

if guess == number:
    print('You guessed the number in ' + str(number_of_guesses) + ' tries!')

else:
    print('You did not guess the number. The number was ' + str(number))

この時点で、プログラムはユーザーに番号が正しいか間違っているかを通知します。これは、ユーザーが推測できないループの最後まで発生しない可能性があります。

途中でユーザーに少し助けを与えるために、whileループにさらにいくつかの条件ステートメントを追加しましょう。 これらは、ユーザーに自分の番号が少なすぎるか多すぎるかを知らせることができるため、正しい番号を推測する可能性が高くなります。 if guess == number行の前にこれらを追加します

guess.py
import random

number = random.randint(1, 25)

number_of_guesses = 0

while number_of_guesses < 5:
    print('Guess a number between 1 and 25:')
    guess = input()
    guess = int(guess)

    number_of_guesses = number_of_guesses + 1

    if guess < number:
        print('Your guess is too low')

    if guess > number:
        print('Your guess is too high')

    if guess == number:
        break

if guess == number:
    print('You guessed the number in ' + str(number_of_guesses) + ' tries!')

else:
    print('You did not guess the number. The number was ' + str(number))

python guess.pyを使用してプログラムを再度実行すると、ユーザーが推測に関してよりガイド付きの支援を受けていることがわかります。 したがって、ランダムに生成された数値が12であり、ユーザーが18を推測した場合、推測が高すぎると通知され、それに応じて次の推測を調整できます。

ユーザーが整数を入力しなかった場合のエラー処理など、コードを改善するためにできることは他にもありますが、この例では、短いコマンドラインプログラムでwhileループが機能していることがわかります。

結論

このチュートリアルでは、Pythonでwhileループがどのように機能するか、およびそれらを構築する方法について説明しました。 While loops は、whileステートメントで設定された条件がTrueの場合、コードのブロックをループし続けます。

ここから、 forループおよびブレーク、続行、およびパスステートメントのチュートリアルを読んで、ループについて学習し続けることができます。