Python 3でwhileループを構築する方法

前書き

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

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

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

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

Whileループ

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

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

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

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

  • パスワードisが正しければ、whileループは終了します。

  • パスワードがnotである場合、whileループは引き続き実行されます。

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

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を入力すると、ループの外側にある最後のprintステートメントが表示されます。

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

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

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

python password.py

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

OutputWhat 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.

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

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

whileループの一般的な前提を理解したので、whileループを効果的に使用するコマンドライン推測ゲームを作成しましょう。 このプログラムがどのように機能するかを最もよく理解するには、using conditional statementsconverting data typesについても読む必要があります。

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

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 statementを使用します。ループから抜け出します。

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

python guess.py

動作はしますが、ユーザーは推測が正しいかどうかを知ることができず、正しいかどうかを知ることなく5回完全に推測できます。 現在のプログラムの出力例は次のとおりです。

OutputGuess 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ステートメントで設定された条件がTrueの場合、While loopsはコードのブロックをループし続けます。

ここから、for loopsbreak, continue, and pass statementsのチュートリアルを読んで、ループについて学習し続けることができます。