LoginSignup
1
2

More than 3 years have passed since last update.

[光-Hikari-のPython]05章-08 制御構文(while文~もう1つの繰り返し構文~)

Last updated at Posted at 2020-06-10

[Python]05章-08 while文~もう1つの繰り返し構文~

まず、以下のプログラムを見てください(プログラムを作成する必要はありません)

for i in range(10):
    print(i, end=' ')

print('処理終了')

これは、for文を用いて、0~9までの値を出力しています。今まではfor文で記載してましたが、今回は上記のプログラムをwhile文で表現することについて触れていきましょう。

while文の書き方

おおむね、while文は以下のように書きます。

while 条件式:
    処理の内容

条件はif文でも書いた、i < 10i == 0といったものです。実際に上記のfor文のプログラムをwhile文を用いて表現してみましょう。chap05の中に、05-08-01.pyというファイル名でファイルを作成し、以下のコードを書いてください。

05-08-01.py
i = 0  ##iの値を0で初期化する

while i < 10:  ##iが10未満の時に処理をする
    print(i, end=' ')
    i+=1  ##iに1を加算する

print('処理終了')

<05-08-01.py実行結果>

【実行結果】
0 1 2 3 4 5 6 7 8 9 処理終了

少し、for文よりはプログラムが長くなったように見えます。処理を追ってみましょう。

まず、while文の場合、繰り返し処理を行う場合にはi = 0で初期化を行います。つまり、最初の値をどうするかを決める処理が必要です。
for文でいうと、range(0, 10)の0の部分がstartとなるので、スタートの0を決めます。
また、while文の場合、i=0としておくことで、繰り返しの回数を把握することもできます

次にwhile文の中身に入っていきます。

【1ループ目】
while i < 10:では、条件式がTrueの場合に処理を繰り返していきます。今、i = 0なので、条件式は0 < 10となり、Trueとなるので、while文の処理が始まります。

そしてiの値(i = 0)を出力し、次にi += 1としています。もし、このi += 1をしないと、【2ループ目】のときの条件判定で、また同じ0 < 10となり、無限ループとなって、while文から永久に出られなくなります
ですので、i += 1でiを1ずつ加算し忘れないようにしてください。
(この時点で、i = 1となっています。)

【2ループ目】
今、i = 1なので、条件式は1 < 10となり、Trueとなるので、while文の処理が始まります。

そしてiの値(i = 1)を出力し、i += 1としています。(この時点でi = 2となっています。)

  <条件がi < 10 の間にwhile文を繰り返します。>

【10ループ目】
今、i = 9なので、条件式は9 < 10となり、Trueとなるので、while文の処理が始まります。

そしてiの値(i = 9)を出力し、i += 1としています。(この時点でi = 10となっています。)

【11ループ目】
今、i = 10なので、条件式は10 < 10となり、Falseとなり、while文から抜けます。

そしてwhile文の外にある、print('処理終了')が出力されます。

これをフローチャートで表すと以下の通りです。

image.png

while文を用いて和の計算を行う

for文でも触れましたが、例えば、1以上100以下の整数で、偶数の和を求めるには以下のように求めました。(プログラムを作成する必要はありません)

sum = 0
for i in range(1, 101):
    if i % 2 == 0:
        sum += i

print(f'総和:{sum}')

<実行結果>

総和:2550

特に説明する必要はないかと思いますが、if文の個所で偶数であるかを判定して、iが偶数であった場合に加算をしております。

これをfor文でなく、while文で表現しましょう。
chap05の中に、05-08-02.pyというファイル名でファイルを作成し、以下のコードを書いてください。

05-08-02.py
sum = 0
i = 1

while i <= 100:
    if i % 2 == 0:
        sum += i  ##ここで和の計算

    i += 1 ##iの値を1増やす
print(f'総和:{sum}')

まず、和を求めるのに、sumの値を初期化するのはfor文のときと同じです。sumを0にしないと、正しく計算されません。

そして、i1を代入し、while文の条件判定を行います。iが100以下の間にwhile文の条件がTrueとなり、処理が繰り返されるので、その間に加算をしていきます。

【1ループ目】
i=1なので、if文の条件はFalseとなり、sumへの加算処理はされず、if文内の処理を飛ばします。
そして、忘れていけないのはiに1を加算することです。これをしないと、前述した通り無限ループとなってしまいます。(この時点でsum=0, i=2

【2ループ目】
i=2なので、if文の条件はTrueとなり、if文内において、sumへの加算処理はされます。
そしてiに1を加算し、i=3となります。(この時点でsum=2, i=3

【3ループ目】
i=3なので、if文の条件はFalseとなり、sumへの加算処理はされず、if文内の処理を飛ばします。
そしてiに1を加算し、i=4となります。(この時点でsum=2, i=4

  <条件がi <=100 の間にwhile文を繰り返します。>

【100ループ目】
i=100なので、if文の条件はTrueとなり、if文内において、sumへの加算処理はされます。
そしてiに1を加算し、i=101となります。(この時点でsum=2550, i=101

【101ループ目】
そして、while文の条件が101 <= 100となり、Falseとなるので、while文から抜けます。

そして最後にprint関数でsumの値を出力しています。

演習問題

演習問題を用意しました。ぜひ解いてみてください。なお、ファイル名は[ ]内に指定したものを使用して、chap05内に作成ください。使用する変数名は好きな変数名を指定してかまいません。

[05-08-p1.py]
【1】while文を利用して1~100までの整数の奇数の合計を求めるプログラムを作成してください。結果は2500となります。


[05-08-p2.py]
【2】while文を利用してリストls=[3, 5, 4, 10, 7, 8]の要素の平均を求めるプログラムを作成してください。結果は6.166666666666667となります。
(ヒント:ls[0]では3ls[1]では5…といったように要素が取り出せます。つまり、ls[i]として、要素を取り出せますね。またlen(ls)でリストの長さも取得できるので、その長さの間で処理を繰り返せます。)


[05-08-p3.py]
【3】【2】のプログラムをfor文を用いて作成してください。

最後に

while文について触れましたが、for文に比べると多少プログラムが長くなってます。
ただしやっていることは同じなので、理解は進みやすかったかと思います。次回はwhile文でよく使われるテクニックについて簡単に説明していきたいと思います。

【目次リンク】へ戻る

1
2
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
1
2