「基本情報 の Python ってどんな感じ?」を解説|午後問題の歩き方


2020-10-14 更新

error

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

令和 2 年度の基本情報技術者試験から、午後試験で選択できるプログラミング言語として、新たに Python が採用されます。

「少し勉強したことがあるので Python で受けてみよう!」と思っている人が多いようですが、「自分の持っている知識で大丈夫だろうか?」と心配している人も多いようです。

 

そこで、この記事では、基本情報技術者試験のシラバス Ver.7.0 に示された「 Python の知識と技術」の中から、「組込み関数」と「イテラブル(シーケンスとコレクション)」にテーマを絞って、それぞれのポイントを解説します。

皆さんの知識の確認をしてください。

infoPython をブラウザからオンラインで実行できる「 JupyterLab 」で、文中のコードをお試しください
info編集部注: スマートフォンでご覧の際、プログラムは横スクロールすると全文をご覧になれます

組込み関数のポイント

覚えておくべき組込み関数の種類

「組込み関数」とは、import 文でインポートしなくても、すぐに使える関数のことです。シラバスに示された組込み関数を以下に示します。

「これは何だろう?」というものがないかどうか確認してください。これらは、シラバスに示されているのですから、試験問題のプログラムの中で堂々と使われるはずです。

機能をしっかりと覚えておきましょう。

シラバスに示された組込み関数

int, float, str, list, range, enumerate, zip, len, print, input, open

シラバスに示された組込み関数は、以下のように

「データ型を変換する関数」
「イテラブルを操作する関数」
「入出力を行う関数」

にグループ分けできます(イテラブルに関しては、記事の後半で説明します)。

これ以降では、グループごとに組込み関数の機能を説明します。

組込み関数のグループ分け

データ型を変換する関数
int, float, str, list
イテラブルを操作する関数
len, range, enumerate, zip
入出力を行う関数
input, print, open

データ型を変換する関数(int、float、str、list)

int 関数、float 関数、str 関数、list 関数は、引数で与えられたオブジェクトを、整数、浮動小数点数、文字列、リストに変換して返します。以下に使用例を示します。

code データ型を変換する関数の使用例
>>> i = int("123")  # "123"という文字列を整数に変換する
>>> type(i)  # 変換後のデータ型を確認する
<class 'int'>  # int型(整数型)である
>>> f = float("4.56")  # "4.56" という文字列を浮動小数点数に変換する
>>> type(f)  # 変換後のデータ型を確認する
<class 'float'>  # float 型(浮動小数点数型)である
>>> s = str(789)  # 789 という整数を文字列に変換する
>>> type(s)  # 変換後のデータ型を確認する
<class 'str'>  # str 型(文字列型)である
>>> l = list("abc")  # "abc"という文字列をリストに変換する
>>> type(l)  # 変換後のデータ型を確認する
<class 'list'>  # list 型(リスト型)である
>>> l  # 変換後のオブジェクトの内容を表示する
['a', 'b', 'c']  # 文字を要素としたリストである

イテラブルを操作する関数(len、range、enumerate、zip)

len 関数は、 len(イテラブル) という構文で使い、イテラブルの要素数を返します。以下に使用例を示します。

code len 関数の使用例
>>> len("hello")  # "hello"という文字列の要素数を得る
5  # 5 文字である
>>> len([1, 2, 3])  # [1, 2, 3] というリストの要素数を得る
3  # 3 個である

 

range 関数は、 range(開始, 終了, ステップ) という構文で使い、開始 ~ 終了 – 1 までの連続した数値を持つ range オブジェクトを返します。

数値の間隔をステップで指定することもできます。以下に使用例を示します。
( range オブジェクトは、そのままでは要素を表示できなので、リストに変換して表示しています)

code range 関数の使用例
>>> list(range(5))  # 終了だけを指定する
[0, 1, 2, 3, 4]  # 0 ~ 終了 - 1 の数値が返される

>>> list(range(2, 5))  # 開始と終了を指定する
[2, 3, 4]  # 開始 ~ 終了 - 1 の数値が返される

>>> list(range(0, 10, 2))  # 開始、終了、ステップを指定する
[0, 2, 4, 6, 8]	  # 開始 ~ 終了 - 1 の数値がステップおきに返される

 

enumerate 関数は、 enumerate(イテラブル, カウンタの初期値) という構文で使い、カウンタの値とイテラブルの要素から構成された enumerate オブジェクトを返します。

カウンタの初期値を省略すると、0 が指定されたとみなされます。以下に使用例を示します。
( enumerate オブジェクトは、そのままでは要素を表示できないので、リストに変換して表示しています)

code enumerate 関数の使用例
>>> list(enumerate("abc"))  # カウンタの初期値を省略した場合
[(0, 'a'), (1, 'b'), (2, 'c')]  # カウンタの値が 0 から始まる

>>> list(enumerate("abc", 1))  # カウンタの初期値に 1 を設定した場合
[(1, 'a'), (2, 'b'), (3, 'c')]  # カウンタの値が 1 から始まる

 

zip 関数は、 zip(イテラブル1, イテラブル2, ・・・) という構文で使い、複数のイテラブルの要素をまとめた zip オブジェクトを返します。以下に使用例を示します。
( zip オブジェクトは、そのままでは要素を表示できないので、リストに変換して表示しています)

code zip 関数の使用例
>>> list(zip([1, 2, 3], [4, 5, 6]))  # 2 つのリストの要素をまとめる
[(1, 4), (2, 5), (3, 6)]  # 対応する要素がまとめられている

入出力を行う関数( input、print、open )

input 関数は、キー入力された文字列を返します。

print 関数は、引数の値を画面に表示します。

open 関数は、 open(ファイル名, モード, エンコーディング) という構文で使い、ファイルを読み書きするためのファイルオブジェクトを返します。 モードとエンコーディングを省略すると、テキストファイルの読み出しを、実行環境のエンコーディングで行うファイルオブジェクトになります。

 

以下は、テキストファイルの内容を画面に表示するプログラム( readtext.py )と実行結果の例です。

ここでは、あらかじめ “apple”、”orange”、”banana” という文字列を格納した fruits.txt というテキストファイルを用意してあります。

code テキストファイルの内容を画面に表示するプログラム
filename = input("ファイル名-->")  # ファイル名をキー入力する
fobj = open(filename)  # ファイルオブジェクトを生成する
for data in fobj:  # ファイルから 1 行ずつ読み出す
    print(data, end="")  # 1 行ずつ画面に表示する
fobj.close()  # ファイルを閉じる
code プログラムの実行結果の例
(base) C:\PythonSamples>python readtext.py  # 実行モードで実行する
ファイル名-->fruits.txt  # ファイル名を入力する
apple  # ファイルの内容が表示される
orange
banana

イテラブルのポイント

覚えておくべきイテラブルの種類

「イテラブル」とは、複数の要素を持つオブジェクトのことです。シラバスに示されたイテラブルを以下に示します。

「これは何だろう?」というものがないかどうか確認してください。これらは、シラバスに示されているのですから、組込み関数と同様に、試験問題のプログラムの中で堂々と使われるはずです。

機能をしっかりと覚えておきましょう。

    シラバスに示されたイテラブル

  • リスト
  • タプル
  • 文字列
  • 辞書
  • 集合

シラバスに示されたイテラブルは、以下のように「シーケンス」と「コレクション」、および「ミュータブル」と「イミュータブル」に分類できます。

シーケンスには、順序があり添字で要素を指定できますが、コレクションには、順序がありません。

ミュータブルは、要素の値を変更できますが、イミュータブルは、値を変更できません。

code イテラブルの分類
順序の有無 \ 変更の可否 ミュータブル
(変更可)
イミュータブル
(変更不可)
シーケンス
(順序あり)
リスト タプル
文字列
コレクション
(順序なし)
辞書
集合

これらの分類を見て、それぞれのオブジェクトの大きな特徴をつかんでください。これ以降では、シーケンスとコレクションに分けてイテラブルの機能を説明します。

シーケンス(リスト、タプル、文字列)

カンマで区切られたオブジェクトを [ ] で囲むとリストとみなされ、 ( ) で囲むとタプルとみなされます。

" " または ' ' で囲まれた文字の並びは、文字列であるとみなされます。

これらのシーケンスには、以下に示した共通の操作ができます。「スライス」とは、シーケンスを部分的に切り出したものです。

code シーケンスに共通した操作

※seq は シーケンス ( sequence ) を意味します

操作 機能
x in seq seq の中に x があれば True を返す
x not in seq seq の中に x がなければ True を返す
seq1 + seq2 seq1 と seq2 を結合する
seq * n seq を n 回繰り返し結合する
seq[i] seq の 0 から数えて i 番目の要素を返す
seq[i:j] seq の i から j – 1 までのスライスを返す
seq[i:j:k] seq の i から j – 1 までの k ごとのスライスを返す
seq.index(x) seq の中で x が最初に出現する添字を返す
seq.count(x) seq の中にある x の個数を返す

以下は、リストに対して様々な操作を行った例です。同様の操作が、タプルと文字列でも行えます。

code リストに対して様々な操作を行った例
>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> 3 in seq  # seq の中に 3 があれば True を返す
True  # 3 があるので True

>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> 6 not in seq  # seq の中に 6 がなければ True を返す
True  # 6 がないので True
>>> seq1 = [1, 2, 3]  # リスト seq1 を作成する
>>> seq2 = [4, 5]  # リスト seq2 を作成する
>>> seq1 + seq2  # seq1 と seq2 を結合する
[1, 2, 3, 4, 5]  # 要素が結合されている
>>> seq = [1, 2]  # リスト seq を作成する
>>> seq * 3  # seq を 3 回繰り返し結合する
[1, 2, 1, 2, 1, 2]  # 要素が 3 回繰り返し結合されている
>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> seq[3]  # seq の 0 から数えて 3 番目の要素を返す
4  # 3 番目の 4 が得られる
>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> seq[0:3]  # seq の 0 から 3 - 1 までのスライスを返す
[1, 2, 3]  # seq[0] から seq[2] までのスライスが得られる
>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> seq[0:5:2]  # seq の 0 から 5 - 1 までの 2 ごとのスライスを返す
[1, 3, 5]  # seq[0] から seq[4] までの 2 ごとのスライスが得られる
>>> seq = [1, 2, 3, 4, 5]  # リスト seq を作成する
>>> seq.index(3)  # seq の中で 3 が最初に出現する添字を返す
2  # 添字 2 で 3 が最初に出現する
>>> seq = [3, 3, 3, 3, 3]  # リスト seq を作成する
>>> seq.count(3)  # seq の中にある 3 の個数を返す
5  # 3 は 5 個ある

コレクション(辞書、集合)

複数の「  キー:バリュー 」を要素として、それらをカンマで区切って並べて { } で囲むと、辞書であるとみなされます。辞書は、添字ではなく、キーで要素を指定します。

以下は、辞書の要素をキーで読み出す例です。果物の名前をキー、価格をバリューにしています。

code 辞書の要素をキーで読み出す例
>>> fruits = {"apple":100, "orange":80, "banana":200}  # 辞書fruitsを作る
>>> fruits ["apple"]  # キーを指定して要素を読み出す
100  # バリューが得られる

カンマで区切られたオブジェクトを { } で囲むと集合であるとみなされます。要素が「 キー:バリュー 」という形式ではないので、辞書と区別できます。

集合には、同じ値の要素を複数入れることができません。もしも、同じ値の要素を入れようとすると、無視されます。

集合は、他の集合と、積( &演算子 )、和( +演算子 )、差( -演算子 )、対称差( ^演算子 )の集合演算ができます。以下は、集合演算の例です。

code 集合演算の例
>>> fruits = {"apple", "orange", "banana"}  # 果物の集合 fruits を作る
>>> reds = {"apple", "rose"}  # 赤い物の集合 reds を作る

>>> fruits & reds  # fruits と reds の積を求める
{'apple'}  # 両方に含まれる要素が得られる

>>> fruits | reds  # fruits と reds の和を求める
{'apple', 'orange', 'rose', 'banana'}  # いずれかに含まれる要素が得られる

>>> fruits - reds  # fruits と reds の差を求める
{'orange', 'banana'}  # fruits から reds の要素が取り除かれる

>>> fruits ^ reds  # fruits と reds の対称差を求める
{'orange', 'rose', 'banana'}  # どちらか一方だけに含まれる要素が得られる

いかがでしたか。この記事の内容が「余裕でわかるぜ!」なら心配ありませんが、「わからないことだらけだ!」なら、Python の言語構文の猛勉強が必要です。

過去の試験を振り返ってみると、新しい言語が採用されたときの第 1 回目の問題は、とてもやさしい内容になっていました。

Pythonの第 1 回目の問題も、きっと同様のはずです。ねらい目です。

ただし、きちんと言語構文を理解していないと問題を解けませんよ!

 

fast_forward続きはこちら

Python image
基本情報のサンプル問題で Python の基礎知識をチェック | 午後問題の歩き方

 

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