基本情報ではじめる Python (4) if ~ else と while / for


2021-07-05 更新

error

この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。

この連載では、プログラミングの入門者を対象として、基本情報技術者試験の出題範囲にテーマを絞って、 Python の言語構文とプログラムの読み方を説明します。

今回のテーマは、 分岐と繰り返しの構文 です。これらは、多くの場合に、試験問題のプログラム(他人が作ったプログラム)を読み取るときの重要なポイントになるので、しっかりとマスターしてください。

分岐と繰り返しの基本構文

プログラムの流れには、

  • 「順次」
  • 「分岐」
  • 「繰り返し」

の 3 つがあります。

順次を表現するのに、特別な構文は必要ありません。複数行の処理を記述すれば、上から下に流れる順次になります。

それに対して、分岐と繰り返しを表現するには、それらを表すための構文を使います。分岐は、 if ~ else 文であり、繰り返しは、 while 文および for 文です。

 

図 1 ~図 3 に、それぞれの基本構文を示します。「基本」と断っているのは、これらの構文には、いくつかのバリエーションがあるからです。図 3 の for 文の基本構文の中にあるイテラブルとは、要素を取り出せるオブジェクトのことで、リスト、タプル、文字列、辞書、集合、 range 関数などがあります。

info編集部注: スマートフォンでご覧の際は、プログラムや表は横スクロールすると全文をご覧になれます

code図 1 if ~ else 文の基本構文
if 条件:
    # 条件が True のときに実行する処理
else:
    # 条件が False のときに実行する処理
code図 2 while 文の基本構文
while 条件:
    # 条件が True である限り繰り返される処理
code図 3 for 文の基本構文
for 変数 in イテラブル
    # イテラブルから取り出した要素を使った処理

どの構文でも、ブロックを使っています。ブロックとは、処理のまとまりを示すものです。

Python では、インデント(プログラムの先頭にスペースを入れて字下げすること)でブロックを表します。ブロックには、複数の処理を記述することもできます。たとえば、図 4 は、処理 1, 処理 2, 処理 3 をブロックとした while 文の例です。条件が True である限り、このブロックの中にある 3 つの処理が繰り返されます。

code図 4 ブロックに複数の処理を記述した while 文の例
while 条件:
    # 処理1
    # 処理2
    # 処理3

if ~ else 文による分岐

それでは、バリエーションも含めて、それぞれの構文を使ったサンプルプログラムを、お見せしましょう。ここでは、 Python の実行モードでプログラムを実行します。たとえば、 sample1.py というファイル名のプログラムは、端末( Windows ではコマンドプロンプト)で、

python sample1.py

と入力して「 Enter 」キーを押すことで実行します。

infoお手元に Python の環境がない場合、ブラウザからオンラインで実行できる「 JupyterLab 」で、文中のコードをお試しください。 play_arrow ボタンを押すか「 Shift + Enter 」で実行できます

リスト 1 は、 if ~ else 文の基本構文のサンプルプログラムです。

キー入力した年齢が 20 未満なら「未成年です。」、そうでないなら「成人です。」と表示します。プログラミング言語で使われるキーワードの意味は、英語の意味と同じです。 if は「もしも」という意味で、 else は「そうではないなら」という意味です。

英語を日本語に訳すように、プログラムを読んでみましょう。そうすれば、すんなりと意味を読み取れるはずです。

codeリスト 1 if ~ else 文の基本構文のサンプルプログラム ( sample1.py )
age = int(input("年齢->"))
if age < 20:
    print("未成年です。")
else:
    print("成人です。")

リスト 1 の実行結果の例を図 5 に示します。

code図 5 リスト 1 の実行結果の例
C:¥test>python sample1.py
年齢->18
未成年です。
C:¥test>python sample1.py
年齢->25
成人です。

if ~ else 文のバリエーション( if ブロックだけ)

リスト 2 は、 if ~ else 文のバリエーションです。

if ブロックだけがあり、 else ブロックがありません。このプログラムは、キー入力した年齢が 20 未満なら、「未成年です。」と表示します。そうではないなら、何も表示しません。

codeリスト 2 if ブロックだけのサンプルプログラム ( sample2.py )
age = int(input("年齢->"))
if age < 20:
    print("未成年です。")

リスト 2 の実行結果の例を図 6 に示します。

code図 6 リスト 2 の実行結果の例
C:¥test>python sample2.py
年齢->18
未成年です。
C:¥test>python sample2.py
年齢->25

if ~ else 文のバリエーション( elif ブロックがある)

リスト 3 も、 if ~ else 文のバリエーションです。

if ブロックと else ブロックの間に、 elif ブロックがあります。 elif は、else if の略で「そうではなくて、もしも」という意味です。 if ブロックの条件が True でないなら、 elif ブロックの条件がチェックされます。

このプログラムは、キー入力した年齢が 20 未満なら「未成年です。」、そうではなくて 65 未満なら「成人です。」、そうではないなら「高齢者です。」と表示します。

codeリスト 3 elif ブロックがあるサンプルプログラム ( sample3.py )
age = int(input("年齢->"))
if age < 20:
    print("未成年です。")
elif age < 65:
    print("成人です。")
else:
    print("高齢者です。")

リスト 3 の実行結果の例を図 7 に示します。

code図 7 リスト 3 の実行結果の例
C:¥test>python sample3.py
年齢->18
未成年です。
C:¥test>python sample3.py
年齢->25
成人です。
C:¥test>python sample3.py
年齢->72
高齢者です。

while 文による繰り返し

リスト 4 は、 while 文の基本構文のサンプルプログラムです。

while は、「~である限り」という意味です。所持金を意味する money の初期値を 10000 として、 money > 0 という条件で、買い物した金額のキー入力と money の更新を繰り返します。

このプログラムの内容は、「所持金がある限り、買い物を繰り返す」というものです。

codeリスト 4 while 文の基本構文のサンプルプログラム ( sample4.py )
money = 10000
while money > 0:
    price = int(input("買い物した金額->"))
    money -= price
print("買い物は終了です。")

リスト 4 の実行結果の例を図 8 に示します。

code図 8 リスト 4 の実行結果の例
C:¥test>python sample4.py
買い物した金額->5000
買い物した金額->3000
買い物した金額->2000
買い物は終了です。

for 文による繰り返し

Python のプログラムでは、イテラブルから要素を繰り返し取り出す、という場面がよくあります。この場合には、 while 文ではなく、 for 文を使います

リスト 5 は、 for 文の基本構文のサンプルプログラムです。

a = [11, 22, 33, 44, 55]

というリスト(リストは、イテラブルの一種です)から要素を繰り返し取り出して、それぞれを画面に表示します。

codeリスト 5 for 文の基本構文のサンプルプログラム ( sample5.py )
a = [11, 22, 33, 44, 55]
for x in a:
    print(x)

リスト 5 の実行結果の例を図 9 に示します。

code図 9 リスト 5 の実行結果の例
C:¥test>python sample5.py
11
22
33
44
55

range 関数を使った for 文

擬似言語には、繰り返し回数をカウントする変数を使った

■ 変数:初期値, 条件, 増分

という構文があります。たとえば、

■ i:0, i < 10, 1 

なら、変数 i の値を 0 から 10 未満まで 1 つずつ増やしながら繰り返しが行われます。

 

これと同様のことを Python で記述すると、リスト 6 のようになります。

range(0, 10, 1)

は、 0 から 10 未満まで 1 つずつ増える値を返します。ここでは、その値を変数 i に代入し、画面に表示しています。

codeリスト 6 range 関数を使った for 文のサンプルプログラム ( sample6.py )
for i in range(0, 10, 1):
    print(i)

リスト 6 の実行結果の例を図 10 に示します。

code図 10 リスト 6 の実行結果の例
C:¥test>python sample6.py
0
1
2
3
4
5
6
7
8
9

break 文と continue 文

繰り返しを行う while 文または for 文のブロックの中で、 break 文を実行すると、繰り返しが中断され、 continue 文を実行すると、それ以降の処理がスキップされます(繰り返しは継続される)。 break は、「中断する」という意味で、 continue は、「継続する」という意味です。

リスト 7 は、 for 文のブロックの中で break 文と continue 文を使ったサンプルプログラムです。 range(0, 10, 1) で得た 0 ~ 10 未満の値を変数 i に代入し、画面に表示しています。

その際に、
i の値が 3 のときは、 continue 文が実行されるので、それ以降にある処理がスキップされます( 3 は表示されません)。
i の値が 7 のときは、 break 文が実行され、その時点で繰り返しが中断します( 7 以降の値は表示されません)。

codeリスト 7 break 文と continue 文のサンプルプログラム ( sample7.py )
for i in range(0, 10, 1):
    if i == 3:
        continue
    if i == 7:
        break
    print(i)

リスト 7 の実行結果の例を図 11 に示します。

code図 11 リスト 7 の実行結果の例
C:¥test>python sample7.py
0
1
2
4
5
6

while 文と for 文のバリエーション( else ブロックがある)

繰り返しを行う while 文と for 文のバリエーションとして、どちらにも else ブロックを追加できます。この else ブロックの処理は、 break 文で繰り返しが中断されなかったときに実行されます。

else は、「そうでなければ」という意味なので、この else は、「繰り返しが中断されなかったら」と覚えるとよいでしょう。

リスト 8 は、 for 文に else ブロックを追加したサンプルプログラムです。

繰り返し表示される「中断しますか?」に対して、「 y 」を入力すると繰り返しが中断されるので、 else ブロックの処理が実行されません。最後まで「 y 」を入力しなければ、繰り返しが中断されないので、 else ブロックの処理(「中断されませんでした。」と表示する処理)が実行されます。

codeリスト 8 for 文に else ブロックを追加したサンプルプログラム ( sample8.py )
for i in range(0, 10, 1):
    print(i)
    s = input("中断しますか?")
    if s == "y":
        break
else:
    print("中断されませんでした。")

リスト 8 の実行結果の例を図 12 に示します。

code図 12 リスト 8 の実行結果の例
C:¥test>python sample8.py
0
中断しますか?n
1
中断しますか?n
2
中断しますか?n
3
中断しますか?y
C:¥test>python sample8.py
0
中断しますか?n
1
中断しますか?n
2
中断しますか?n
3
中断しますか?n
4
中断しますか?n
5
中断しますか?n
6
中断しますか?n
7
中断しますか?n
8
中断しますか?n
9
中断しますか?n
中断されませんでした。

いかがでしたか。 Python の分岐と繰り返しの構文を、しっかりとマスターできたでしょう。

この連載では、今後も、基本情報技術者試験を Python で受けるための知識を取り上げて行きます。

それでは、またお会いしましょう!

 

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『基本情報ではじめるPython』の連載一覧 label 著者