Python3エンジニア認定基礎試験 対策(其の2)

python-code python
この記事は約11分で読めます。

Python3エンジニア認定基礎試験を受けるべく勉強をしていますが、実際に模試が無料でありましたので復習しながらまとめていきますの第2回めです。

初回は以下にまとめました。

問題ベースの復習

以下のプログラムを実行した際の出力結果は?

a = 2
b = 5

c = 3.0 + b, 5 * a

print(c)

答え

(8.0, 10)

  1. 3.0はfloat型、bに代入されている 2 はint型。float型とint型は計算ができる。
  2. 5はint型、aに代入されている5もint型なのでそのまま計算できる。
  3. ()は省略可能だが、今回は記載してる。

以下のプログラムを実行した際の出力結果は?

print(list(range(5)))

答え

[0, 1, 2, 3, 4]

list型での出力のため、[ ]の出力となる。

rangeで範囲が指定されるので0からの個数が出力される。

以下のプログラムと同じ意味なのは?

t = 123,345,'test'

答え

t = (123,345,’test’)

上記はタプル型

t = 123,345,’test’ のような形は、タプルのアンパックの例。(タプルは丸括弧を省略できる!!)

5. データ構造 — Python 3.8.4 ドキュメント

以下のプログラムを実行した際の出力結果は?

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’]

  1. mathモジュールのpi定数をインポート(pi・・・円周率)
  2. 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
利用可能なだけの精度の数学定数 π = 3.141592… (円周率)。

https://docs.python.org/ja/3/library/math.html#constants

Pythonインタープリタの出力結果は?

>>> import math
>>> math.cos(math.pi / 5)

答え

0.8090169944

  1. mathライブラリをインポート
  2. 関数cos(余弦を求める)で、pi(円周率) / 5
ちなみに、

>>> math.cos(math.pi)
-1.0

Pythonのコーディングスタイルで間違っているもの

答え

可能であれば、コメント行を独立させるのを避ける。

可読性が下がるため、可能なら、コメントは行に独立で書くこと。

4. その他の制御フローツール — Python 3.8.5 ドキュメント

Pythonインタープリタの出力結果は?

(1,3,5) < (1,2,3,4)

答え

FALSE

  1. ()なのでタプル型
  2. タプル型、リスト型の場合の比較演算子は、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

  1. リスト型で要素がnum_listに入っている
  2. range(終了)で、num_list.count(4)は、num_listのリストに含まれる要素4の出現回数を数える。 -> 4は3回出現している -> range(3)になる。
  3. for i in range(3)
    print(3, end=’ ‘)
    の出力のため0, 1, 2となる。

print()は引数”end”に値を入れることで、末尾に何をつけるかを設定することができる。

対話環境でヒストリ情報が保存されているファイルは?

答え

.python_history

デフォルトの設定ではユーザーディレクトリの .python_history という名前のファイルに履歴を保存します。

条件についての説明で間違っているものは?

答え

比較はブール演算のand及びorによって組み合わせることができ、また比較の結論はnotにより否定ができる。これらの優先順位は比較演算子よりも高い。

これらの優先順位は比較演算子よりも高い。」ここが違う。優先順位は、比較演算子よりもand / or / not が低い。

Pythonおぼえがき<演算子の優先順位> - Qiita
Python始めました。 Windows 10, Python 3.6.2rc2 を使っています. 演算子の優先順位が分からなかったので,ここにおぼえがき 演算子の順序 優先度 演算子 意味 高:1 (expre...
否定の場合の例

x = 10
if not x < 5:
    print('xは5より小さくない。')

Pythonインタープリタにて以下を入力した際、2を出力するためには?

>>> list = [6, [5, [1, 2]], 4, [3, 0]]

答え

list[1][1][1]

  1. 多次元リスト
  2. 2は、1つ目のリストの要素1の、2つ目の配列の要素1の3つ目の配列の要素1にいる。

ログを取得するためのモジュールは?

答え

logging

Logging HOWTO — Python 3.8.4 ドキュメント

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 です
raw文字列の利用
raw 文字列ではバックスラッシュ( Windows 環境では ¥)をエスケープ用の文字ではなく単なる文字として扱います。ここでは raw 文字列の利用方法について解説します。

以下のプログラムを実行した際の出力結果は?

d = 'diveinto'
d + 'code'
print(d)

答え

diveinto

2行目の d + ‘code’ をなにかの変数に入れていないので、出力は最初の ‘diveinto’ になる。

例外処理の説明として間違っているものは?

答え

else節は全てのexcept節より前でなければならない。

try ~ except が例外処理の基本。tryで例外が発生ぜずに正常終了したあとに行う処理は else で指定できる。
例外が発生して except でキャッチした場合は、elseの処理は実行されない。

Pythonの例外処理(try, except, else, finally) | note.nkmk.me
Pythonで例外(実行中に検出されたエラー)をキャッチして処理するにはtry, exceptを使う。例外が発生しても途中で終了させずに処理を継続できる。さらにelse, finallyを使うことで終了時の処理を設定することが可能。8. エラーと例外 - 例外を処理する — Python 3.7.1rc1 ドキュメント...

try ~ exept 文

try文の動作について

  1. 最初にtry節が実行
  2. 例外が出なければ、except節はスキップされ、try文の実行が終了
  3. try節の実行中に例外が発生すると、try節中の残りはスキップされる。発生した例外の型がexceptキーワードの後ろで指定してある例外と一致すればexcept節が実行され、try文の後のプログラムの実行がそのまま続く。
  4. 例外の型が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発生

  1. 出力結果: を出力したあとに例外処理を入れている(try ~ except)
  2. tryの中:raiseは強制的に自作の例外を作れる。ExceptionはClass名でメッセージがタプル型で入っている。
  3. print(“開始”)は実現しないので、exceptに流れる。
  4. exceptに進む。メッセージはExceptionだから、下の方の例外が実行される。
    “予期せぬ問題発生: “とraise Exception(“開始前”, “Exception発生”)の1要素目”Exception発生”が出力される。
  5. elseは例外が発生しなかった場合に実行される。

raiseの書き方
raise <Exception Class>[(<message>)]

try ~ except

try: 
    例外が発生するかもしれないが、実行したい処理。
except エラー名:
    例外発生時に行う処理
  1. tryの中に指定された処理が実行。
    ※例外が発生しなければ、except文はスキップ。
  2. try実行中にexceptキーワードの後に指定したエラー名と一致する例外が発生すると、except文が実行され、それ以降に記述された処理も実行されます。
Pythonの例外処理!try-exceptをわかりやすく解説! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
プログラミングにおいてエラーはつきものです。 Pythonではtry-exceptで「例外処理(exception)」を記述しておくことで、予期せぬエラーを未然に防ぐことができます。 この記事では エラーと例外の違いについて try-exceptの基本的な使用方法 といった基本的な内容から raiseとpassについて...

Python対話型インタープリタは?

答え

IPython

IPython: 強力な対話型Python実行環境

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”]

  1. [:-3]なので、始点の省略のスライス。
  2. その上で -3 なので位置−3(”c”)(含まない)までの最初(”a”)からの文字が出力。

参考資料

タイトルとURLをコピーしました