while構文で条件付きのくりかえし処理をマスターするよー!

while構文で条件付きのくりかえし処理をマスターするよー!

while構文は条件付きの繰り返し処理

前回までで「for構文」の使い方はマスターしたと思う。for構文は「○○回繰り返す」という命令だったよね。今回やるのは「while構文」。「○○になるまで繰り返す」っていう書き方ができるんだ。

while構文の使い方

今回やる問題はこんな感じだ。

1+2+3+… と数字を大きくしながら足し算していき、足し算の合計が50以上になったらやめる。このときの合計の数を表示してください。

ちょっとややこしい問題に思えるけど、きちんとプログラムで書けるんだ。先に答えを書いちゃって後から解説していくよ!

# codeing=utf-8

total = 0
count = 1

while total < 50:
    total = total+count
    count = count+1
print(total)

▽ 実行結果

55
>>> 

解説

まず3行目と4行目をみてみよう。これは変数をつくってる。合計の数字は「total」という名前で、1+2+3+…と足していく数字は「count」で作ってみたよ。totalはまだ何も足してないから「0」、countは1から足していくから「1」を代入してるんだね。

total = 0
count = 1

6〜8行目に出てくるのが「while構文」だ。構文の書き方はこんな感じ。

while ①条件式:
    ②条件を満たす間だけ繰り返したい命令

①は今回なら「totalが50未満の間だけ」という条件だ。それを「total < 50」ってふうに書くんだね。これは数学の不等号と同じだ。でもプログラムでは「比較演算子」って呼び方をするから覚えておこう!比較演算子の一覧も書いておくよ。

比較演算子 意味
< a < b aはbより小さい
<= a <= b aはb以下
== a == b aとbは等しい
> a > b aはbより大きい
>= a >= b aはb以上
!= a != b aとbは等しくない

それじゃあ6〜9行目をもう一度みていくよ。

while total < 50:
    total = total+count
    count = count+1
print(total)

7・8行目だけ左に空白があることに注目。これはfor構文と同じ「インデント」だ。これで7・8行目だけを繰り返すっていう意味になるんだね。だから9行目は繰り返さずに1回だけ実行される。

それじゃあ7・8行目の中身をみていこう。まず7行目は「total = total+count」だ。変数の中身は最初に書いたから、1回目のループでは「0+1」になる。

そして8行目ではcount = count+1」と書いて、countにいまの数に1を足すという命令をしてるんだ。これで1回目の1を足し、2回目は2を足し…って動きになるんだね!

さらに7・8行目は、6行目の「while total < 50:」の条件を満たす間だけくりかえすから、「50以上になったら足すのをやめる」って動きができるってわけ。

最後に計算が全部終わったあとで、9行目のprint(total)が実行される。いままでの計算の合計がでてくるんだね!

特殊なwhile構文

while構文にはもう少し違った書き方もあるから順番にみていくよ。

①:永遠に繰り返すwhile構文

while構文は条件を満たす間だけ繰り返すものだったよね。でも無条件に永遠に繰り返すって書き方もできるんだ。その書き方がこれだ。

while True:
    繰り返したい命令

条件式のところを「True」にしたんだね。これだけで永遠に繰り返すって意味になる。「True」は最初を大文字で書く。全部小文字だと別の意味になっちゃうから注意だ。

これをプログラムファイルに書いて実行すると永遠に繰り返すから止まらないよw そんなときはwindowsなら「Ctrl + C」、Macなら「Control + C」で強制終了できるから使ってね。

「永遠に繰り返すなんて何に使うの?」って思った人もいると思う。でも実は結構便利なんだ。あとでやるけど「条件が整ったら処理をやめる」って命令を別に書くこともできる。だから、例えば「データが来るのを永遠に待っておいて、データが届いたら待つのをやめて処理する」みたいに組みわせて使えるんだよ。

②:whileループが終わったときに1回だけ命令を実行する

whileは条件を満たす間だけ命令を繰り返す。でも繰り返しが終わったタイミングで1回だけ命令を追加で書くこともできるんだ。その書き方がこれ。

while 条件式:
    繰り返す命令
else:
    繰り返しが終わったら実行する命令

こんな風に「else:」を使って書けばいいんだ。ちなみにこの書き方はfor構文でも出来るよ。

for 変数 in シーケンス:
    繰り返す命令
else:
    繰り返しが終わったら実行する命令
今日のまとめ

  • 「while構文」は条件を満たすあいだ繰り返す!
  • 「while構文」の書き方を覚えよう!
  • 特殊な「while構文」も知っておこう!