Python3エンジニア認定基礎試験を受けるべく勉強をしていますが、実際に模試が無料でありましたので復習しながらまとめていきますの第2回めです。
初回は以下にまとめました。
- 問題ベースの復習
- 以下のプログラムを実行した際の出力結果は?
- 以下のプログラムを実行した際の出力結果は?
- 以下のプログラムと同じ意味なのは?
- 以下のプログラムを実行した際の出力結果は?
- Pythonインタープリタの出力結果は?
- Pythonインタープリタの出力結果は?
- Pythonのコーディングスタイルで間違っているもの
- Pythonインタープリタの出力結果は?
- 以下のプログラムを実行した際の出力結果は?
- 対話環境でヒストリ情報が保存されているファイルは?
- 条件についての説明で間違っているものは?
- Pythonインタープリタにて以下を入力した際、2を出力するためには?
- ログを取得するためのモジュールは?
- Pythonインタープリタの出力結果は?
- 以下のプログラムを実行した際の出力結果は?
- 例外処理の説明として間違っているものは?
- 以下のプログラムを実行した際の出力結果は?
- Python対話型インタープリタは?
- Pythonインタープリタの出力結果は?
- 以下のプログラムを実行した際の出力結果は?
- 参考資料
問題ベースの復習
以下のプログラムを実行した際の出力結果は?
a = 2
b = 5
c = 3.0 + b, 5 * a
print(c)
答え
(8.0, 10)
- 3.0はfloat型、bに代入されている 2 はint型。float型とint型は計算ができる。
- 5はint型、aに代入されている5もint型なのでそのまま計算できる。
- ()は省略可能だが、今回は記載してる。
以下のプログラムを実行した際の出力結果は?
print(list(range(5)))
答え
[0, 1, 2, 3, 4]
list型での出力のため、[ ]の出力となる。
rangeで範囲が指定されるので0からの個数が出力される。
以下のプログラムと同じ意味なのは?
t = 123,345,'test'
答え
t = (123,345,’test’)
上記はタプル型
t = 123,345,’test’ のような形は、タプルのアンパックの例。(タプルは丸括弧を省略できる!!)
以下のプログラムを実行した際の出力結果は?
dic = 'diveintocode'
print(dic[1:10:2])
答え
ienoo
文字列が入っている変数dicの 1番目の要素から10番目の要素まで(iveintocod)から1つ飛ばしで出力。
スライス・・・変数名[開始:終了:ステップ]
Pythonインタープリタの出力結果は?
>>> from math import pi
>>> [str(round(pi, i)) for i in range(0, 5)]
答え
[‘3.0’, ‘3.1’, ‘3.14’, ‘3.142’, ‘3.1416’]
- mathモジュールのpi定数をインポート(pi・・・円周率)
- round関数でpiの結果を小数点第 i 位まで出し、str型にする。
round(数値, 桁数)
繰り返しは、5個(0, 1, 2, 3, 4)をiにコピーしてループ。
range(開始, 終了)、このとき、 開始 =< i < 終了
第1引数を0とした、range(0, 終了)は、range(終了)と等価。rangeはリストを返す。
小数・整数を四捨五入するround関数は、第2引数をとるとfloat型になる。(第2引数を省略すると、int型になる。)
math.pi
https://docs.python.org/ja/3/library/math.html#constants
利用可能なだけの精度の数学定数 π = 3.141592… (円周率)。
Pythonインタープリタの出力結果は?
>>> import math
>>> math.cos(math.pi / 5)
答え
0.8090169944
- mathライブラリをインポート
- 関数cos(余弦を求める)で、pi(円周率) / 5
ちなみに、
>>> math.cos(math.pi)
-1.0
Pythonのコーディングスタイルで間違っているもの
答え
可能であれば、コメント行を独立させるのを避ける。
可読性が下がるため、可能なら、コメントは行に独立で書くこと。
Pythonインタープリタの出力結果は?
(1,3,5) < (1,2,3,4)
答え
FALSE
- ()なのでタプル型
- タプル型、リスト型の場合の比較演算子は、1つ1つの要素が完全に一致している場合のみTrueが返る。
※intの 10 とfloat の 10.0 を比較した場合、数値として等しければTrueが返る。
以下のプログラムを実行した際の出力結果は?
num_list = [2, 4, 6, 4, 4, 2, 6]
for i in range(num_list.count(4)):
print(i, end=' ')
答え
0 1 2
- リスト型で要素がnum_listに入っている
- range(終了)で、num_list.count(4)は、num_listのリストに含まれる要素4の出現回数を数える。 -> 4は3回出現している -> range(3)になる。
- for i in range(3)
print(3, end=’ ‘)
の出力のため0, 1, 2となる。
print()は引数”end”に値を入れることで、末尾に何をつけるかを設定することができる。
対話環境でヒストリ情報が保存されているファイルは?
答え
.python_history
デフォルトの設定ではユーザーディレクトリの .python_history という名前のファイルに履歴を保存します。
条件についての説明で間違っているものは?
答え
比較はブール演算のand及びorによって組み合わせることができ、また比較の結論はnotにより否定ができる。これらの優先順位は比較演算子よりも高い。
「これらの優先順位は比較演算子よりも高い。」ここが違う。優先順位は、比較演算子よりもand / or / not が低い。
否定の場合の例
x = 10
if not x < 5:
print('xは5より小さくない。')
Pythonインタープリタにて以下を入力した際、2を出力するためには?
>>> list = [6, [5, [1, 2]], 4, [3, 0]]
答え
list[1][1][1]
- 多次元リスト
- 2は、1つ目のリストの要素1の、2つ目の配列の要素1の3つ目の配列の要素1にいる。
ログを取得するためのモジュールは?
答え
logging
Pythonインタープリタの出力結果は?
D:\home\name\python
答え
print(r’D:\home\name\python’)
文字列の前のrもしくはRは、エスケープシーケンスになる。今回は、バックスラッシュがエスケープされている。
raw文字列と言われる。
以下のように入力すると
print("インストール先は c:¥¥code¥¥python¥¥bin です")
print(r"インストール先は c:¥code¥python¥bin です")
出力は、以下のようになる。
インストール先は c:¥code¥python¥bin です
インストール先は c:¥code¥python¥bin です
以下のプログラムを実行した際の出力結果は?
d = 'diveinto'
d + 'code'
print(d)
答え
diveinto
2行目の d + ‘code’ をなにかの変数に入れていないので、出力は最初の ‘diveinto’ になる。
例外処理の説明として間違っているものは?
答え
else節は全てのexcept節より前でなければならない。
try ~ except が例外処理の基本。tryで例外が発生ぜずに正常終了したあとに行う処理は else で指定できる。
例外が発生して except でキャッチした場合は、elseの処理は実行されない。
try ~ exept 文
try文の動作について
- 最初にtry節が実行
- 例外が出なければ、except節はスキップされ、try文の実行が終了
- try節の実行中に例外が発生すると、try節中の残りはスキップされる。発生した例外の型がexceptキーワードの後ろで指定してある例外と一致すればexcept節が実行され、try文の後のプログラムの実行がそのまま続く。
- 例外の型がexcept説にある名前と一致しない場合、更に外側にあるtry文(あれば)に渡される。見つからない場合は、未処理例外となり、エラーが出る。
try ~ exept 文は、オプションで else節がいれられる。
位置は全てのexcept節より後ろでなければならない。
こんな感じで使う。
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close
別の例:ZeroDivisionErrorの例外を補足
try:
print(1 / 0)
except ZeroDivisionError:
print('Error')
# 出力
# Error
別の例:基底クラスException
# 組み込み例外の基底クラスである、Exceptionを使う方法
def divide_exception(a, b):
try:
print(a / b)
except Exception as e:
print(e)
devide_exception(1, 0)
# 出力
# devision by zero
divide_exception('a', 'b')
# 出力
# unsupported operand type(s) for /: 'str' and 'str'
例外の送出
raise文により、指定の例外を強制的に発生させられる。
raise 例外クラス(メッセージ):
例
try:
raise ValueError("エラー!!!!")
except ValueError as e:
print(e)
# 出力
# エラー!!!!
以下のプログラムを実行した際の出力結果は?
print("出力結果: ")
try:
raise Exception("開始前", "Exception発生")
print("開始")
except IOError as msg:
print("IOError発生: ", msg.args[0])
except Exception as msg:
print("予期せぬ問題発生: ", msg.args[1])
else:
print("Else表示")
答え
出力結果: 予期せぬ問題発生: Exception発生
- 出力結果: を出力したあとに例外処理を入れている(try ~ except)
- tryの中:raiseは強制的に自作の例外を作れる。ExceptionはClass名でメッセージがタプル型で入っている。
- print(“開始”)は実現しないので、exceptに流れる。
- exceptに進む。メッセージはExceptionだから、下の方の例外が実行される。
“予期せぬ問題発生: “とraise Exception(“開始前”, “Exception発生”)の1要素目”Exception発生”が出力される。 - elseは例外が発生しなかった場合に実行される。
raiseの書き方
raise <Exception Class>[(<message>)]
try ~ except
try:
例外が発生するかもしれないが、実行したい処理。
except エラー名:
例外発生時に行う処理
- tryの中に指定された処理が実行。
※例外が発生しなければ、except文はスキップ。 - try実行中にexceptキーワードの後に指定したエラー名と一致する例外が発生すると、except文が実行され、それ以降に記述された処理も実行されます。
Python対話型インタープリタは?
答え
IPython
Pythonインタープリタの出力結果は?
[(x, y) for x in [0, 1, 2] for y in [1, 2, 3] if x != y]
答え
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 1), (2, 3)]
for文でxとyがそれぞれループし、 x = y になるときを除いて出力される。
以下のプログラムを実行した際の出力結果は?
x = ["a", "b", "c", "d", "e"]
print(x[:-3])
答え
[“a”, “b”]
- [:-3]なので、始点の省略のスライス。
- その上で -3 なので位置−3(”c”)(含まない)までの最初(”a”)からの文字が出力。