「基本情報 の Python ってどんな感じ?」を解説|午後問題の歩き方
error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。
令和 2 年度の基本情報技術者試験から、午後試験で選択できるプログラミング言語として、新たに Python が採用されます。
「少し勉強したことがあるので Python で受けてみよう!」と思っている人が多いようですが、「自分の持っている知識で大丈夫だろうか?」と心配している人も多いようです。
そこで、この記事では、基本情報技術者試験のシラバス Ver.7.0 に示された「 Python の知識と技術」の中から、「組込み関数」と「イテラブル(シーケンスとコレクション)」にテーマを絞って、それぞれのポイントを解説します。
皆さんの知識の確認をしてください。
もくじ
組込み関数のポイント
覚えておくべき組込み関数の種類
「組込み関数」とは、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 関数は、引数で与えられたオブジェクトを、整数、浮動小数点数、文字列、リストに変換して返します。以下に使用例を示します。
>>> 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(イテラブル)
という構文で使い、イテラブルの要素数を返します。以下に使用例を示します。
>>> len("hello") # "hello"という文字列の要素数を得る
5 # 5 文字である
>>> len([1, 2, 3]) # [1, 2, 3] というリストの要素数を得る
3 # 3 個である
range 関数は、 range(開始, 終了, ステップ)
という構文で使い、開始 ~ 終了 – 1 までの連続した数値を持つ range オブジェクトを返します。
数値の間隔をステップで指定することもできます。以下に使用例を示します。
( 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 オブジェクトは、そのままでは要素を表示できないので、リストに変換して表示しています)
>>> 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 オブジェクトは、そのままでは要素を表示できないので、リストに変換して表示しています)
>>> 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 というテキストファイルを用意してあります。
filename = input("ファイル名-->") # ファイル名をキー入力する
fobj = open(filename) # ファイルオブジェクトを生成する
for data in fobj: # ファイルから 1 行ずつ読み出す
print(data, end="") # 1 行ずつ画面に表示する
fobj.close() # ファイルを閉じる
(base) C:\PythonSamples>python readtext.py # 実行モードで実行する ファイル名-->fruits.txt # ファイル名を入力する apple # ファイルの内容が表示される orange banana
イテラブルのポイント
覚えておくべきイテラブルの種類
「イテラブル」とは、複数の要素を持つオブジェクトのことです。シラバスに示されたイテラブルを以下に示します。
「これは何だろう?」というものがないかどうか確認してください。これらは、シラバスに示されているのですから、組込み関数と同様に、試験問題のプログラムの中で堂々と使われるはずです。
機能をしっかりと覚えておきましょう。
- リスト
- タプル
- 文字列
- 辞書
- 集合
シラバスに示されたイテラブル
シラバスに示されたイテラブルは、以下のように「シーケンス」と「コレクション」、および「ミュータブル」と「イミュータブル」に分類できます。
シーケンスには、順序があり添字で要素を指定できますが、コレクションには、順序がありません。
ミュータブルは、要素の値を変更できますが、イミュータブルは、値を変更できません。
順序の有無 \ 変更の可否 | ミュータブル (変更可) |
イミュータブル (変更不可) |
---|---|---|
シーケンス (順序あり) |
リスト | タプル 文字列 |
コレクション (順序なし) |
辞書 集合 |
これらの分類を見て、それぞれのオブジェクトの大きな特徴をつかんでください。これ以降では、シーケンスとコレクションに分けてイテラブルの機能を説明します。
シーケンス(リスト、タプル、文字列)
カンマで区切られたオブジェクトを [ ]
で囲むとリストとみなされ、 ( )
で囲むとタプルとみなされます。
" "
または ' '
で囲まれた文字の並びは、文字列であるとみなされます。
これらのシーケンスには、以下に示した共通の操作ができます。「スライス」とは、シーケンスを部分的に切り出したものです。
※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 の個数を返す |
以下は、リストに対して様々な操作を行った例です。同様の操作が、タプルと文字列でも行えます。
>>> 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 個ある
コレクション(辞書、集合)
複数の「 キー:バリュー
」を要素として、それらをカンマで区切って並べて {
と }
で囲むと、辞書であるとみなされます。辞書は、添字ではなく、キーで要素を指定します。
以下は、辞書の要素をキーで読み出す例です。果物の名前をキー、価格をバリューにしています。
>>> fruits = {"apple":100, "orange":80, "banana":200} # 辞書fruitsを作る
>>> fruits ["apple"] # キーを指定して要素を読み出す
100 # バリューが得られる
カンマで区切られたオブジェクトを { }
で囲むと集合であるとみなされます。要素が「 キー:バリュー
」という形式ではないので、辞書と区別できます。
集合には、同じ値の要素を複数入れることができません。もしも、同じ値の要素を入れようとすると、無視されます。
集合は、他の集合と、積( &演算子 )、和( +演算子 )、差( -演算子 )、対称差( ^演算子 )の集合演算ができます。以下は、集合演算の例です。
>>> 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続きはこちら
label 関連タグ
免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
基本情報 プログラミング 言語の選択と学習方法|午後問題の歩き方
update基本情報のサンプル問題で Python の基礎知識をチェック | 午後問題の歩き方
update「基本情報 の Python ってどんな感じ?」を解説|午後問題の歩き方
update矢沢久雄さんが執筆! 午後 プログラミング 問題対策の参考書「速習言語」を刊行しました!!
updateこうすりゃ解ける! 2019年度秋期 (令和元年度) 基本情報技術者試験の午後問題を徹底解説
updateこうすりゃ解ける! 2019年度春期 (平成31年度) 基本情報技術者試験の午後問題を徹底解説
updateこうすりゃ解ける! 2018年度秋期 (平成30年) 基本情報技術者試験の午後問題を徹底解説
update午後問題の歩き方 | 試験1週間前にやるべき午後問題の知識チェック (チェックシート付き)
update午後問題の歩き方 | Java プログラミング問題の楽勝パターン(2)オブジェクト指向
update午後問題の歩き方 | Java プログラミング問題の難易度(1)Java基本構文
update『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数