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

error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。
この連載では、プログラミングの入門者を対象として、基本情報技術者試験の出題範囲にテーマを絞って、 Python の言語構文とプログラムの読み方を説明します。
今回のテーマは、 分岐と繰り返しの構文 です。これらは、多くの場合に、試験問題のプログラム(他人が作ったプログラム)を読み取るときの重要なポイントになるので、しっかりとマスターしてください。
もくじ
分岐と繰り返しの基本構文
プログラムの流れには、
- 「順次」
- 「分岐」
- 「繰り返し」
の 3 つがあります。
順次を表現するのに、特別な構文は必要ありません。複数行の処理を記述すれば、上から下に流れる順次になります。
それに対して、分岐と繰り返しを表現するには、それらを表すための構文を使います。分岐は、 if ~ else 文であり、繰り返しは、 while 文および for 文です。
図 1 ~図 3 に、それぞれの基本構文を示します。「基本」と断っているのは、これらの構文には、いくつかのバリエーションがあるからです。図 3 の for 文の基本構文の中にあるイテラブルとは、要素を取り出せるオブジェクトのことで、リスト、タプル、文字列、辞書、集合、 range 関数などがあります。
if 条件:
# 条件が True のときに実行する処理
else:
# 条件が False のときに実行する処理
while 条件:
# 条件が True である限り繰り返される処理
for 変数 in イテラブル
# イテラブルから取り出した要素を使った処理
どの構文でも、ブロックを使っています。ブロックとは、処理のまとまりを示すものです。
Python では、インデント(プログラムの先頭にスペースを入れて字下げすること)でブロックを表します。ブロックには、複数の処理を記述することもできます。たとえば、図 4 は、処理 1, 処理 2, 処理 3 をブロックとした while 文の例です。条件が True である限り、このブロックの中にある 3 つの処理が繰り返されます。
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 は「そうではないなら」という意味です。
英語を日本語に訳すように、プログラムを読んでみましょう。そうすれば、すんなりと意味を読み取れるはずです。
age = int(input("年齢->"))
if age < 20:
print("未成年です。")
else:
print("成人です。")
リスト 1 の実行結果の例を図 5 に示します。
C:¥test>python sample1.py
年齢->18
未成年です。
C:¥test>python sample1.py
年齢->25
成人です。
if ~ else 文のバリエーション( if ブロックだけ)
リスト 2 は、 if ~ else 文のバリエーションです。
if ブロックだけがあり、 else ブロックがありません。このプログラムは、キー入力した年齢が 20 未満なら、「未成年です。」と表示します。そうではないなら、何も表示しません。
age = int(input("年齢->"))
if age < 20:
print("未成年です。")
リスト 2 の実行結果の例を図 6 に示します。
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 未満なら「成人です。」、そうではないなら「高齢者です。」と表示します。
age = int(input("年齢->"))
if age < 20:
print("未成年です。")
elif age < 65:
print("成人です。")
else:
print("高齢者です。")
リスト 3 の実行結果の例を図 7 に示します。
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 の更新を繰り返します。
このプログラムの内容は、「所持金がある限り、買い物を繰り返す」というものです。
money = 10000
while money > 0:
price = int(input("買い物した金額->"))
money -= price
print("買い物は終了です。")
リスト 4 の実行結果の例を図 8 に示します。
C:¥test>python sample4.py
買い物した金額->5000
買い物した金額->3000
買い物した金額->2000
買い物は終了です。
for 文による繰り返し
Python のプログラムでは、イテラブルから要素を繰り返し取り出す、という場面がよくあります。この場合には、 while 文ではなく、 for 文を使います。
リスト 5 は、 for 文の基本構文のサンプルプログラムです。
a = [11, 22, 33, 44, 55]
というリスト(リストは、イテラブルの一種です)から要素を繰り返し取り出して、それぞれを画面に表示します。
a = [11, 22, 33, 44, 55]
for x in a:
print(x)
リスト 5 の実行結果の例を図 9 に示します。
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 に代入し、画面に表示しています。
for i in range(0, 10, 1):
print(i)
リスト 6 の実行結果の例を図 10 に示します。
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 以降の値は表示されません)。
for i in range(0, 10, 1):
if i == 3:
continue
if i == 7:
break
print(i)
リスト 7 の実行結果の例を図 11 に示します。
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 ブロックの処理(「中断されませんでした。」と表示する処理)が実行されます。
for i in range(0, 10, 1):
print(i)
s = input("中断しますか?")
if s == "y":
break
else:
print("中断されませんでした。")
リスト 8 の実行結果の例を図 12 に示します。
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 関連タグ
免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
※独習ゼミは、受験ナビ運営のSEプラスによる試験対策eラーニングです。

基本情報ではじめる Python 最終回 試験問題レベルにチャレンジ
update
基本情報ではじめる Python (9) import 文とライブラリの活用
update
基本情報ではじめる Python (8) 組み込み関数
update
基本情報ではじめる Python (7) generator と yield 文
update
基本情報ではじめる Python (6) ラムダ式 って何? どんな用途で使うの?
update
基本情報ではじめる Python (5) オブジェクト指向
update
基本情報ではじめる Python (4) if ~ else と while / for
update
基本情報ではじめる Python (3) 引数 ~ Python の関数の引数には様々な形式がある
update
基本情報ではじめる Python (2) 配列 ~ リスト、タプル、文字列、集合、辞書の特徴
update
基本情報ではじめる Python (1) 基本構文 ~ 擬似言語と比べて覚える
update
『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数