回数ではなく条件で繰り返しを制御するのがwhileループ。
「先生がOKというまで腕立てしなさい!」
と言われたとき、腕立てが終わるのは、回数ではなくて条件で決まるよね。

こういう時、プログラミングでは「while(ワイル)」を使うよ。(whileは英語で「~する間」という意味)
| for | 回数を指定して繰り返し |
| while | 条件を指定して繰り返し |
for文の復習として、下のコードにコードを追加して、10回「イチニッ!」とprintするプログラムにしてみよう。
for i in range(10):
# ここにコードを追加
できたかな?
じゃあ、while文を使って、ユーザーが「OK」と入力するまで「イチニッ!」とprintし続けるプログラムを書いてみよう
while 繰り返しを続ける条件:
繰り返し行いたい処理
今回、ユーザーが入力できるプログラムを作成するので、pythonが入力を受け付けるinput()という機能を使うよ。今後たくさん出てくるので、覚えといてね
まず、ユーザーが入力した文字を入るための変数を用意。最初は何も入ってない文字列でいいから、""の中は何もなくてOK
tsuzuki = ""
次にwhile文を書いていくよ.繰り返し内容は後で考えるから、とりあえずwhile文のなかはこうしておこう
※まだこのプログラムは実行しないでね!!
tsuUki = ""
while tsuzuki != "おわり":
print("イチニッ!")
while tsuzuki != "おわり"の部分に注目
!= の記号覚えてる?「A != B」の場合は、「AとBは違う」という意味。覚えてない人はレジュメを見直そう!
つまりこのプログラムでは、「tsuzukiがおわりではない場合は繰り返しを続けて、そうではなくなったとき=tsuzukiがおわりになったときは繰り返しをやめる」というプログラムなわけ
みんなは実行しないでね!このプログラムを実行すると、無限ループになり、パソコンにとって負担になります。いったん無限ループになるとパソコンはものすごい速さで処理を行うので、処理能力が低下したり、最悪の場合は故障の原因になります。もしやるなら自分のパソコンでためしてみてね!!
もし間違えて無限ループを起こしてしまった時は、すぐに
ctrl+C (コピーするのと同じコマンド)をターミナルで入力すれば止まるよ
とはいえ、プログラムを実行すると、OKと言われるまでずーっとプログラムを動かしつづけなくちゃいけない。そういう時にtimeモジュールというのが役立ちます。処理をするの指定の時間止めてくれる機能。これもよく使うことになるからおぼえといてね
import time
tsuzuki = ""
while tsuzuki != "おわり":
print("イチニッ!")
time.sleep(1.0)
print()文は、プログラムを使うユーザーからすると、決められた文字が出てくるだけの味気ない機能。ユーザーが文字を決めてprintするには、input():インプット関数を使うよ
moji = input("文字を入力してください")

さっきの無限ループのコードにこれらの機能を追加してみよう
import time
tsuzuki = ""
while tsuzuki != "おわり":
print("イチニッ!")
time.sleep(1.0)
tsuzuki = input("続ける:")
こんな感じでコードが動けば成功

何回腕立てをしたかをカウントできるようにしよう
やることは3つ。
countという変数を用意して、最初は0にしよう
import time
tsuzuki = ""
count = 0
while tsuzuki != "おわり":
print("イチニッ!")
count += 1
time.sleep(1.0)
tsuzuki = input("続ける:")
さて、ここが問題もう
print(count)
とするのはわかるでしょう。問題はこのコードをどこにいれるか。
前回のインデントの話を思い出してみよう。繰り返しをするのインデントされているところだけ。今回は全部終わったあとに一回だけprintされる必要はないから、繰り返しprintする必要はなし。
whileの繰り返しが終わったあとにやりたいことは、インデントされていない状態、whileのかたまりの次にかけばいい
import time
tsuzuki = ""
count = 0
while tsuzuki != "おわり":
print("イチニッ!")
count += 1
time.sleep(1.0)
tsuzuki = input("続ける:")
print(count)

何事もやりすぎは良くない!腕立てを10回したら強制的に終わりにするようにしてみよう。
とはいえ、繰り返し終了の条件は、もう「while tsuzuki != "おわり"」のところでひとつ書いちゃってる。あと、このコードでは count += 1のところでcountが10になるけど、そのあとtime.sleep(1.0)が入っているので、10になった瞬間から1秒待たないといけない。
繰り返しの処理の途中でも、特定の条件になったら強制終了する方法がbreak
if文と組み合わせて使うよ
import time
tsuzuki = ""
count = 0
while tsuzuki != "おわり":
print("イチニッ!")
count += 1
if count == 10:
break
time.sleep(1.0)
tsuzuki = input("続ける:")
腕立てふせをしていて、しっかり上げきらなかったり、ひざをついていたりして、厳しい体育の先生に「やりなおし!」っていわれたことない?
やり直すからと言って、カウントを0になおすんじゃなくて、例えばそれまでに3回やってたら、
・print("イチニッ!")ってしない
・count を1減らす
・でも繰り返しは終了しない
continueを使うことで、これができるよ!
※continue(続ける)
continueする条件は、入力で「ミス」と入力したとき、ということにしよう
import time
tsuzuki = ""
count = 0
while tsuzuki != "おわり":
tsuzuki = input("続ける:")
if tsuzuki == "ミス":
continue
else:
print("イチニッ!")
count += 1
if count == 10:
break
time.sleep(1.0)
