Python3エンジニア認定基礎試験を受けるべく勉強をしていますが、実際に模試が無料でありましたので復習しながらまとめていきますの第4回めです。
1回め、2回め、3回めはこちらです!
- 問題ベースの復習
- 以下のプログラムを実行した際の出力結果は?
- 以下のプログラムを実行した際の出力結果は?
- 以下のプログラムをインタープリタにて実行した際の出力結果は?
- printを実行した場合の、出力結果は?
- Pythonインタープリタにて以下のように入力した際の出力結果は?
- バイナリデータレコードの処理を行うモジュールは?
- Pythonがサポートする複素数の虚部を表す接尾辞は?
- 構文的に文が必要なのに、プログラム的には何もする必要がないときに使う構文は?
- 以下のプログラムを実行した際の出力結果は?
- アクティベート状態から抜けるコマンドは?
- 以下の実行結果を得たい場合の、(A)および(B)に記述すべきコードは?
- 以下のプログラムを実行した際の出力結果は?
- 次のfor文を実行した場合の出力結果は?
- 参考資料
問題ベースの復習
以下のプログラムを実行した際の出力結果は?
list = [5, 3, 1, 2, 3, 4, 5, 2]
list.remove(2)
print(list)
答え
[5, 3, 1, 3, 4, 5, 2]
- 8つの要素がリスト型で変数listに代入されている
- そこから remove() で、()で指定した値と同じ値を取得し、最初の要素のみを削除
- 変数listを出力
remove( )・・・指定した値と同じ値を取得し、最初の要素のみを削除
以下のプログラムを実行した際の出力結果は?
i = 10
def num(arg=i):
print(arg)
i = 7
num()
答え
10
- 変数 i に10を代入
- 関数 numを定義
- 引数 arg に i を定義
- この時点で、i は10が入っている
- 関数 num を定義したときには、num()オブジェクトが arg=10 を保持している。
- i = 7 を定義
- num() で関数を実行
- num() iには10が入っている
デフォルト引数・・・関数定義時に代入された変数オブジェクトへのリンク
デフォルト値を設定することで、呼び出しの際に値を呼び出さなくても良くなる。-> num()で良くなる。
引数のデフォルト値の評価は、関数を定義した時点で定義を書いたスコープで行なわれる
i = 5
def f(arg=1):
print(arg)
i = 6
f()
# 出力は、5
# 引数のデフォルト値の氷菓は、一度しか起きない。
以下のプログラムをインタープリタにて実行した際の出力結果は?
(1, 3, 5) < (1, 2, 3, 4)
答え
FALSE
- 要素どおしを比較し、真偽を求めていく
- 1の次が 3 と 2 で、 3 < 2 となる
- これは偽 なので FALSEが返る
printを実行した場合の、出力結果は?
print("出力結果: ")
print('円周率は%5.3fである。'%math.pi)
答え
出力結果: 円周率は3.142である。
- math.piは、円周率を返すので、3.141592653589793 が返る
- %5.3f
- %fはfloat型(実数)を出力
- 表示桁数は、 <全体の幅>.<小数点以下の幅> という指定なので 全体で5文字の小数点以下3つの出力。
% 演算子を使っての文字列書式設定・・・% 演算子の左側の print() のフォーマット文字列に、% 演算子の右側の値を適用し、結果の文字列を返す。
Pythonインタープリタにて以下のように入力した際の出力結果は?
>>> import random
>>> random.sample(range(1000), 5)
答え
[756, 121, 482, 264, 841]
- ランダムに要素を1つ選択・・・random.choice(リスト)
- ランダムに複数の要素を選択(重複なし)・・・random.sample(リスト, 取得したい要素の個数)
- ランダムに複数の要素を選択(重複あり)・・・random.choices(リスト, 取得したい要素の個数)
リストは、range(1000)なので、0~999で、そこから5つを取り出す。(ランダムで)
バイナリデータレコードの処理を行うモジュールは?
答え
struct
- structは、Pythonでバイナリデータを処理するモジュール。
- バイナリデータはPythonではbytes型に表現され、structモジュールを使うと細かくフォーマットを指定してバイナリデータを作成したり数値に変換したりができる。
- センサーや制御機器系の I/Oで使われるようで、ラズパイでよく使われるらしい。
Pythonがサポートする複素数の虚部を表す接尾辞は?
答え
「j」または「J」
- 複素数を表現する際には、 j もしくは J を添え字として付けることにより、表現できる。
- 複素数の四則演算にはモジュールインポートは不要。
複素数と虚数
虚数(imaginary number)・・・2乗したときに0未満の実数になる数
数学的には虚数単位「i」は、 i × i = -1
i, 3i, -7i みたいな表現になる。
複素数(complex number)・・・実数と虚数を組み合わせたもの
2 – 4i, 8 + 3i みたいな表現になる。
実際には存在しない複素数と虚数が必要な理由・・・仮説の計算に便利だったから。1つの数で座標を表すことに便利だったから。 i を掛けると、原点を中心に反時計回りに90度回転させるという意味になる。
構文的に文が必要なのに、プログラム的には何もする必要がないときに使う構文は?
答え
pass
Pythonのpass文は何もしない文であり、文法上何かを書く必要があるがなにも実行することがないときに使う。
https://note.nkmk.me/python-pass-usage/
使いところは、新しくコードを書いているときに関数や条件の本体にプレースホルダとして置いておき、もっと抽象的なレベルについて考え続けることを助ける。
以下のプログラムを実行した際の出力結果は?
def fugafuga(title, content = 'default_content', number = 4):
content = 'content'
print(title, end=' ')
print(content, end=' ')
print(number)
fuugafuga(title = 'title_default', content = 'None', number = 5)
答え
title_default content 5
- キーワード引数と位置引数の混合型
- 関数fugafugaを定義(title, content = ‘default_content’, number = 4)は仮引数と実引数
- 関数の中のprintがある。
- 関数fugafugaを使用
- title(仮引数)=’title_default'(実引数), content(仮引数)=’None'(実引数), number(仮引数)=5(実引数)
- titleには、’title_default’が、contentには、関数定義でcontent = ‘content’なので contentが、numberには、5が入って出力される。
キーワード引数・・・引数を指定して関数を呼び出す際、値だけを指定するのではなく関数側で定義されている仮引数の名前を使って 仮引数の名前=値 の形で指定することができる。
位置引数
引数を指定して関数を呼び出す場合、呼び出し側で指定した引数の値が順番に関数側で引数のところに定義した変数に順番に代入されるもの。
def 関数名(仮引数1, 仮引数2):
.....
return
関数名(実引数1, 実引数2)
引数を記載した順番に従って引数の値が渡される。
実引数1 -> 仮引数1へ
実引数2 -> 仮引数2へ
キーワード引数
関数を呼び出す側でどの引数にどの値を渡すのかを 仮引数の名前=値 の形式で指定する。
def 関数名(仮引数1, 仮引数2):
.....
return
関数名(仮引数1=実引数1, 仮引数2=実引数2)
# 引数の記述順は任意となる。
# 関数名(仮引数2=実引数2, 仮引数1=実引数1) でもOK
位置引数とキーワード引数の混在パターン
混在パターンは、最初に位置引数を指定し、その後キーワード引数を記述する
def 関数名(仮引数1, 仮引数2, 仮引数3)
.....
return
関数名(実引数1, 仮引数2=実引数2, 仮引数3=実引数3)
# キーワード引数の後に仮引数名が指定されていない引数を利用した場合は、SyntaxError:positional argument follows keywords argumentになる。
例
def people(old, name, address):
print('年齢は、' + str(old) + 'です。', end=' ')
print('名前は、' + name + 'です。', end=' ')
print('住所は、' + address + 'です。')
people(21, 'Takuro', 'Nagasaki')
people(address='Saga', old=32, name='Jack')
people(55, address='Tokyo', name='Maeda')
出力は、バッチリこの様になります。
年齢は、21です。 名前は、Takuroです。 住所は、Nagasakiです。
年齢は、32です。 名前は、Jackです。 住所は、Sagaです。
年齢は、55です。 名前は、Maedaです。 住所は、Tokyoです。
アクティベート状態から抜けるコマンドは?
答え
deactivate
venvなどの仮想環境の開始はactivate, 終了はdeactivate
以下の実行結果を得たい場合の、(A)および(B)に記述すべきコードは?
2017-09-11
from (A) import (B)
now = date.today()
print(now)
答え
(A)datetime (B)date
datetimeモジュール
日付や時刻を操作するためのクラスを提供している。
- datetime.date・・・日付を取得
- datetime.time・・・時刻を取得
- datetime.datetime・・・日付と時刻を取得
datetimeオブジェクト
- datetime.now()・・・現在の日時
dateオブジェクト
- date.today()・・・今日の日付
以下のプログラムを実行した際の出力結果は?
d = 'dive\ninto\ncode\t'
print(len(d))
答え
15
- len()関数 ・・・文字列(str)の長さ(文字数)を取得するときに使う。
- 全角文字も半角文字も1文字(長さ1)として扱われる
- エスケープシーケンスの場合は、1文字(\nで1文字、\tで1文字)として扱われる
次のfor文を実行した場合の出力結果は?
titles={'title1': 'hoge1', 'title2': 'hoge2', 'title3': 'hoge3'}
print("出力結果: ")
for k,v in titles.items():
print(v)
答え
出力結果: hoge1 hoge2 hoge3
- 辞書型で要素が titles に格納
- 出力結果: が出力
- ループ(for)
- titlesに対して、items()メソッドで、titlesの中のキーと対応する値を同時に取得
- それを k (key), v (value) に代入
- vの方を出力する。
ループのテクニック items()メソッド
ディクショナリにループをかけるとき、 items() メソッドを使うことで、キーとそれに対応した値を同時に得られる。