0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[光-Hikari-のPython]05章-09 制御構文(for文とwhile文の使い分け)

Last updated at Posted at 2020-06-11

#[Python]05章-09 その他~for文とwhile文の使い分け~
ここまで、制御構文の繰り返し構文として、for文とwhile文を使用してきました。
この2つについては処理の内容が同じであることを確認しました。for文からwhile文への書き換えも前節で触れました。

しかし、このfor文とwhile文は使い分けることができます。今回はその使い分けについて触れてみます。

##決まっていない回数の繰り返しにはwhile文を使用する
例えば、**「ある鍋にコップ10杯の水を入れてください。」と言われたら、水を10杯入れることがわかっています。しかし、「ある鍋にいっぱいになるまで、このコップで水を入れてください」**と言われたらどうでしょう?その時点で何杯の水を入れればよいかは事前にわかりません。

このように予め回数がわかっていなかったり、回数を決めないで繰り返し処理を書く際にはwhile文が適しています。

例えば、以下のプログラムでその例を見てみましょう。
プログラムの内容としては以下の通りです。

「クラスの生徒のテスト点数の合計点平均点を求めるプログラムを作成します。ただし、クラスの生徒の人数はクラスごとに代わるため、何人いるかはわかっていません。点数を順番に入力していき、マイナスの値が入力されたらそれまでの合計点と平均点を求めるプログラムを作成します。なお、点数は100点満点とします。」

chap05の中に、samp05-09-01.pyというファイル名でファイルを作成し、以下のコードを書いてください。

samp05-09-01.py
i = 1  #iはクラスの人数
total = 0 #クラスの合計点をtotalに加算していく
score = 0 #生徒の点数

while score >= 0:
    total += score
    score = int(input(f'{i}人目の点数を入力してください(点数は100点満点です。負の値の入力で処理終了):'))
    i += 1

i -= 1 #人数が1人多いため1人分減らします
print(f'合計点:{total}')
print(f'平均点:{total/i}')

<samp05-09-01.py実行結果>

【実行結果】
1人目の点数を入力してください(点数は100点満点です。負の値の入力で処理終了):90
2人目の点数を入力してください(点数は100点満点です。負の値の入力で処理終了):75
3人目の点数を入力してください(点数は100点満点です。負の値の入力で処理終了):83
4人目の点数を入力してください(点数は100点満点です。負の値の入力で処理終了):-1
合計点:248
平均点:62.0

プログラムの内容については特に問題ないかと思います。これを見ると、クラスには何人いるかどうかがわからないため、処理開始時点では1人として、それを1人ずつ加算していっています。
ただし、while文を抜けた時点では、人数が1人増えているので、1を減らしています。

##最後に
for文とwhile文の使い分けについてわかりましたでしょうか?人数や処理回数がわからないのに繰り返し構文を使うことはよくあります。
よく使う技術なので、ぜひ押さえておきましょう。

###【目次リンク】へ戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?