26: while 文で条件を満たしている間繰り返し処理を行う方法

前回の続きです。

次はwhile文を見ていきましょう。

while文とは何か

while文というのは、条件がTrueである間、繰り返し処理を行う構文です。停止条件を満たすまで延々とプログラムを動かし続けたいときに使います。

今回のGPTアプリでもwhile文を使います。ユーザーが修了コマンドを打ち込むまで延々とチャットを繰り返すと言うように使います。

while文とは条件が真(True)である間、繰り返し処理を行う構文です。意図的に停止させるか、停止条件を満たすまで延々とプログラムを動かし続けたいときに使います。

文法はwhileと書いて条件を書いた後にコロン、そしてインデントして処理を書きます。

while 条件: # 処理

この条件には真偽値、TrueかFalseが入ります。

評価結果が真偽値(True / False)になっていればいいので、and、or、>や==などの演算子を使用することができます。この評価結果がTrueの間はループします。

もし延々と繰り返したい時は、条件のところに直接 True と書きます。Trueの間は繰り返しますのが while なのでずっとループし続けます。

ただし、気をつけないと無限ループになります。while ブロックの中に停止条件を書いておかないと延々動き続けますので。それが意図した無限ループであればいいんですが、意図せず無限ループになってしまうとコンピュータのリソースが奪われてしまいますのでよくありません。

この条件のところで、ちゃんと止まるような条件の書き方をしましょう。

具体例として、まず変数numという値が5未満の間ループするというプログラムを作成します。

num = 0
while num < 5:
    print(num)
    num += 1

ループの中でnumに対して1ずつ足していく。ループの条件は5未満ですから5になったときにループを終了する、と言う挙動になります。

まず最初はnum = 0です。5未満ですから、0が表示されて、numに1が追加されます。しかし次の処理でnumは1で条件を満たしていますのでループします。

numが5になると、while文の条件に合致しませんので、whileループから抜け、プログラムは終了します。

このようにwhile文というのはTrueの間繰り返すと言う構文です。

whileを使って指定した金額分ガチャを引くプログラムを作る

次の例として「指定した金額分ガチャを引く」ということをやってみます。

import random
money = int(input("ガチャは1回100円です。何円課金しますか?:"))
while money >= 100:
    money -= 100
    gacha = random.randint(1, 100)
   
    if gacha == 1:
        print("SSR")
    elif gacha <= 5:
        print("SR")
    else:
        print("R")

import randam というちょっと見慣れない構文を使います。

importについては後で詳しくやりますがプログラムに機能を足すものです。

ブラウザの拡張機能をインストールするように、プログラムにその都度必要な拡張機能をインストールできると言うのがこのimportです。

randomという拡張機能、これをモジュールとかライブラリと言いますが、randomモジュールを使ってランダムな結果を得ることができます。

最初にお金をいくらから始めるかをinputで受け取ります。ガチャ一回100円です。

何円課金しますか? とユーザーに聞きます。

ただし、このインプットで受け取ったものは文字列型ですからキャスト(型変換)して使う必要があります。

while ループではmoneyが100円以上あればガチャを引き続けます。

次にループの中でまずは money -= 100と言うことで100円引きます。

次はガチャを引き、引いたものをgachaという変数に格納します。

random.randint(1, 100)、とすると1から100までの間でランダムな値を取ってくるという挙動になります。

つまりgachaには1から100までの値がランダムに入ります。

そしてもしガチャが1であったらSSR。5未満だったらSR(スーパーレア)、そうでなければR、ノーマルアイテムですね。

これを実行すると何円課金しますか?と聞かれますので、ではまず1000円でやってみます。

Rしか出てきませんでした。一回やってみます。10,000円でやってみましょう。

スーパーレア、SRが時々、出てきました。SSRを出したいので100,000円課金してみます。

SSRが出ました。

このように条件を満たしてる間ループするというのがこのwhileループです。

ここでブレイクポイントを置いて、挙動を一個一個確認してみましょう。

1,000円でやってみます。このmoneyの中には1,000円が入っています。条件を満たしている、つまりmoneyが100円以上あるので、ループに入れます。

moneyから100円引かれ900円になります。

そしてガチャを引きます。

34という値が取り出されました。そして判定が行われて、Rが表示されます。

もう一回条件判定します。

今900円ですから、ガチャを引いて、で、もう一回判定してというループをお金がなくなるまで繰り返します。

ループを一回まわすごとに100円引かれ、最後には所持金が0円になります。所持金は0円ですから、while文の条件を満たさなくなります。Falseになりますので、ループには入っていかずに終了となります。このようにwhileループを使ってガチャを表現できます。

あなたもこのプログラムを書いてデバック実行して挙動を確かめてみてください。

今回のまとめです。

while文というのは、条件がTrueの間繰り返し処理を行う構文です。

停止条件を満たすまで延々とプログラムを動かし続けたいときに使います。

文法はwhilleで条件コロン、改行してインデントの後に処理と言うふうに書きます。

条件のところはTrueかFalseになるようなものを入れます。

注意点として、無限ループにならないように注意しましょう。