0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

徹底攻略Python3エンジニア認定基礎試験 問題集 --impress-- 13章総仕上げ問題 解いてみた

Last updated at Posted at 2024-01-24

「Python3エンジニア認定 [基礎試験]」 合格を目指します。

試験日まで、1週間を切りました。
ぼちぼち合格ラインの押上に入ります。

使用教材:
・Pythonチュートリアル第4版 --オライリー・ジャパン--
・徹底攻略Python3エンジニア認定基礎試験 問題集 --impress--

徹底攻略Python3エンジニア認定基礎試験 問題集 --impress--
13章 総仕上げ問題
35/40
点数にすると、87.5/100点満点なので、ぎりぎり合格ライン。

間違えた内容の大半は「12章.標準ライブラリ」関係でした。。。
確かにここの部分はあまり力いれていなかったかもしれません。
(というか飛ばしたかも!?)

見直し

【標準ライブラリ】
●OSモジュール
os.getcwd():カレントディレクトリを取得する。
os.chdir(移動先):カレントディレクトリを移動する。

●コマンドライン引数
プログラム実行時に指定できる特殊な引数。
 Python プログラム名.py 引数1 引数2 ...
コマンドライン引数は、sysモジュールのargv属性を使用してリストで取得できる。

例:
[python check.py 1 2]を実行して['check.py', '1', '2']が表示される。

【check.py】
import sys
print(sys.argv)

●argparseモジュール
argparseモジュールのArgumentParser()を使っても、コマンドライン引数を取得できます。
sysモジュールのargv属性よりも、扱いやすいコマンドラインのインターフェースを作成できます。

【parse.py】
import argparse

parser = argparse.ArgumentParser() # 【A】
parser.add_argument("--head") # 【B】
parser.add_argument("body", nargs="+") # 【B】
args = parser.parse_args() # 【C】
print(args) # 【D】

【A】parserの作成
最初に、parserという名前でパーサ(構文解釈器)のオブジェクトを作成します。

【B】引数の情報を追加
作成したオブジェクトに、add_argument()メソッドで引数の情報を追加します。
追加後は、コマンド実行時に2種類の引数が必要になります。1つは--head=値で、もう一つは1個以上の任意形式の引数です。nargs="+"が「1個以上」の指定です。

【C】引数の情報を取得
変数argsを作成し、引数の情報を代入します。
parser.parse_args()メソッドを使用することで、引数の情報を取得できます。

【D】引数の情報の出力
引数の情報(args)を出力すると、下記のようになります。

実行結果
Namespase(head='1', body=['2', '3'])

●mathモジュール
log()
対数を求める関数。
lod(値,底)は、返り値を「n」とした場合、底のn乗が値になります。
例:log(16,2)=4.0 (※2の4乗のため)

●randomモジュール
「random.randrange(a, b)」 は、「a以上、b未満」の整数を返します。
「random.randint(a, b)」は、「a以上、b以下」の整数を返します。
「random.sample(シーケンス, 抽出数) 」は、シーケンスの中から指定の数を重複なしで抽出します。
「random.choices(シーケンス, 抽出数) 」は重複ありで抽出します。
「random.choice(シーケンス)」は、シーケンスの中から一つ抽出します。
「random.random()関数」は、0以上1未満のランダムな値(小数)を返します。(引数は設定できない)

●statisticsモジュール
数理統計に用いる関数が含まれる。
・statistics.mean()
データの平均を求める。
・statistics.median()
データの中央値を求める。
・statistics.variance()
データの不偏分散を求める。

※不偏分散:平均との差の2乗の和を「データ数-1」で割って求めます。

●datetimeモジュール
日時のオブジェクトを作成する

from datetime import datetime

dt = datetime(2000, 12, 31)

この変数dtを決められた形式の文字列で表示するには、dt.strftime(フォーマット)のように記述する。

ptint(dt.strftime("%Y-%m-%d")
2000-12-31

●単体テスト
Pythonで単体テストを実施するには、unittestモジュールを使用します。
unittestによる単体テストでは、テスト対象のモジュールとは別に、テスト実行側の.pyファイルを用意する必要があります。
ファイル作成後に、コマンドラインから「python -m unittest」のように実行すると、対象の関数やメソッドのテスト結果を確認できます。

import unittest
import mod #テスト対象をインポートする

class TestSample(unittest.TestCase):
    def test_it(self):
        actual = mod.calc(2, 3) #テスト対象の実行結果
        expected = 5 #期待する結果
        self.assertEqual(actual, expected) #結果が同じことを確認
# 結果が同じ場合の最終行
OK

# 結果が異なる場合の途中の出力
AssertionError: 6 != 5

●出力データの整形
pprint()関数は、1行が80文字を超えると要素ごとに改行します。

リストを改行して出力する1
import pprint

pprint.pprint(lines)
【実行結果】
['sample test string 0000',
 'sample test string 0001',
 'sample test string 0002']

なお、下記のようにしても要素ごとに改行されるが、角括弧[]などが表示されない。

リストを改行して出力する2
print(",\n".join(lines))
【実行結果】
sample test string 0000,
sample test string 0001,
sample test string 0002

textwrapモジュールのfill()関数を使うと、widthで指定した幅に収まるように整形します。

リストを改行して出力する3
import textwrap
print(textwrap.fill(", ".join(lines), width=24))
【実行結果】
sample test string 0000,
sample test string 0001,
sample test string 0002

●reモジュール
re.sub(パターン、置換文字列、対象文字列)を使うと、対象文字列内で特定のパターンにマッチする部分を、置換文字列に変換できます。

【特殊文字】
特殊文字 意味
() 括弧内をグループ化/td>
[a-z] 小文字のアルファベット1文字
+ 直前の文字の1回以上の繰り返し
\1 1番目のグループ
正規表現による文字列の置換
s = "tic tac tac toe"
print(re.sub(r"([a-z]+) \1", r"\1", s))

※rを付けるとバックスラッシュ「\」そのものになる。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?