Python実務基礎 問題集・練習問題クイズ

収録問題 60問 / 10問ランダム出題

データ構造 関数 例外 ファイル・JSON 仮想環境 テスト ログ セキュリティ 並行処理
Python実務基礎の10問クイズに挑戦

ランダムに出題・即時フィードバック・間違えた問題の復習機能付き

クイズをはじめる →

Python実務基礎のおすすめ教材を見る →

収録テーマ一覧(全60問)

Q1

変更可能な要素を順序付きで保持し、追加・削除したい。適切な型は?

答え: list

listは順序を保持する変更可能なコレクションです。

Q2

ユーザーIDから名前を高速に引きたい。適切なデータ構造は?

答え: dict

dictはkeyとvalueの対応を保持し、keyによる検索に適します。

Q3

重複を除いたタグ集合を扱いたい。適切な型は?

答え: set

setは重複しない要素の集合を表します。

Q4

辞書にkeyがない場合、例外を出さず既定値を得たい。適切なのは?

答え: mapping.get(key, default)

dict.getはkeyがなければ指定した既定値を返します。

Q5

大量の値を一度に保持せず順次処理したい。適切な方法は?

答え: yieldを使うgenerator

generatorは必要なときに値を生成するためメモリ使用量を抑えられます。

Q6

関数の既定引数に空listを直接指定すると起き得る問題は?

答え: 呼び出し間で同じlistが再利用される

既定引数は関数定義時に評価されます。Noneを使い関数内で生成するのが一般的です。

Q7

関数が受け取った可変長の位置引数をまとめる記法は?

答え: *args

*argsは追加の位置引数をtupleとして受け取ります。

Q8

resourceを処理後に例外の有無にかかわらず解放したい。適切な構文は?

答え: with文でcontext managerを使う

withはcontext managerの終了処理を確実に呼び出します。

Q9

想定した例外だけを処理し、他の障害は隠したくない。適切なのは?

答え: except ValueErrorのように具体的な例外を捕捉する

具体的な例外だけを捕捉すると予期しない障害を上位へ伝えられます。

Q10

例外へ業務上の文脈を追加しつつ元の原因も保持したい。適切なのは?

答え: raise NewError(...) from exc

raise ... from ...は例外chainを明示し、原因追跡を容易にします。

Q11

文字列へ変数を読みやすく埋め込みたい。適切なのは?

答え: f-string

f-stringは式を明示的かつ読みやすく埋め込めます。

Q12

異なる型の値を文字列と直接+で連結するとどうなる?

答え: 多くの場合TypeErrorになる

明示的にstrへ変換するかf-stringを使います。

Q13

2つの変数が同じ値かを比較したい。通常使う演算子は?

答え: ==

==は値の等価性を比較します。isは同一objectかを調べます。

Q14

Noneかどうかを判定する推奨記法は?

答え: value is None

Noneはsingletonなのでidentity比較のisを使います。

Q15

sequenceをindexと値の組でloopしたい。適切なのは?

答え: enumerate(sequence)

enumerateはindexと要素を同時に返します。

Q16

JSON文字列をPython objectへ変換したい。適切なのは?

答え: json.loads(text)

json.loadsはJSON文字列をdictやlist等へdecodeします。

Q17

Python objectをJSON文字列へ変換したい。適切なのは?

答え: json.dumps(value)

json.dumpsは対応objectをJSON文字列へencodeします。

Q18

UTF-8 text fileを確実に読みたい。適切なopenは?

答え: open(path, encoding="utf-8")

encodingを明示するとOS既定値の差による文字化けを防げます。

Q19

OSに依存しにくいpath操作をしたい。適切なのは?

答え: pathlib.Path

pathlibはpathの結合・確認・読み書きをobject指向で扱えます。

Q20

外部commandを引数付きで安全に実行したい。適切な基本方針は?

答え: subprocess.runへ引数listを渡しshell=Falseを保つ

引数listとshell=Falseはshell injectionの危険を下げます。

Q21

projectごとに依存packageを分離したい。基本的な方法は?

答え: venv等でvirtual environmentを作る

virtual environmentはprojectごとにinterpreter環境とpackageを分離します。

Q22

applicationの依存versionを再現可能にしたい。適切なのは?

答え: lockされた依存情報をversion管理しCIで同じものをinstallする

依存を固定すると環境ごとの予期しないversion差を減らせます。

Q23

moduleを直接実行した場合だけCLI処理を動かしたい。使うguardは?

答え: if __name__ == "__main__":

直接実行時は__name__が__main__になり、import時の副作用を避けられます。

Q24

設定値をsource codeへ直書きせず環境から受け取りたい。基本的な方法は?

答え: os.environまたは設定libraryで環境変数を読む

環境変数は設定をcodeから分離できますが、secret storeや検証も組み合わせます。

Q25

application logをprintだけでなくlevel・時刻・出力先付きで管理したい。使う標準moduleは?

答え: logging

loggingはlevel、formatter、handlerを設定して運用可能なlogを出せます。

Q26

大量recordを処理中、1件の失敗で全体を即終了させるべきでない。適切な設計は?

答え: 失敗単位を捕捉して記録し、方針に従い継続・retry・隔離する

失敗境界と再処理方針を明確にすると部分障害へ対応できます。

Q27

HTTP API呼び出しでnetwork障害へ備える基本方針は?

答え: timeoutを設定し、再試行可能な失敗だけbackoff付きでretryする

timeoutと限定retryにより停止と過負荷を防ぎます。

Q28

関数の入力・戻り値の意図を明示しstatic checkerで確認したい。使うものは?

答え: type hints

type hintsは実行時強制ではありませんが、IDEやtype checkerで不整合を検出できます。

Q29

単純なdata containerに自動生成されたinitやreprが欲しい。適切なのは?

答え: @dataclass

dataclassはfield定義からinit、repr、比較等を生成できます。

Q30

DB queryへユーザー入力を渡す安全な方法は?

答え: DB driverのparameterized queryを使う

parameter bindingは値をSQL構文から分離しSQL injectionを防ぎます。

Q31

小さな関数の期待結果を自動検証したい。適切なのは?

答え: unit testで入力と期待値をassertする

unit testは小さい単位の振る舞いを高速・反復可能に確認します。

Q32

外部APIを呼ぶ関数のunit testを安定させたい。適切なのは?

答え: dependencyを注入しmock/fakeで境界を置き換える

外部境界を置換すると速度と決定性を保ち、integration testと役割分担できます。

Q33

temporary fileを使うtestで後始末漏れを防ぎたい。適切なのは?

答え: temporary directory fixture/context managerを使う

temporary resourceのlifecycleをtest frameworkやcontext managerへ任せます。

Q34

値の検証をassertだけで本番処理に実装する問題は?

答え: 最適化optionでassertが無効化され得る

assertは開発時の不変条件確認向けです。入力errorには明示的な例外を使います。

Q35

信頼できないdataを読み込む際pickleを避ける理由は?

答え: deserialization時に任意code実行につながり得る

pickleは信頼済みPython object向けで、外部入力には安全なformatとschema検証を使います。

Q36

未検証の文字列をevalへ渡す問題は?

答え: 任意のPython codeを実行され得る

evalは式をcodeとして実行するため、parserや明示的な変換を使います。

Q37

CPU負荷の高い純Python処理を複数coreで並列化したい。一般的な選択は?

答え: multiprocessingまたはprocess pool

processは別interpreterでCPU-bound処理を複数coreへ分散できます。

Q38

多数のI/O待ちtaskを効率よく扱う選択肢は?

答え: asyncioと非同期対応library

asyncioはI/O待ち中に他taskを進められますが、blocking処理を避ける必要があります。

Q39

production障害解析に役立つlogへ含める情報は?

答え: 時刻、level、request/job ID、主要contextを秘密なしで記録する

correlation IDとcontextは追跡性を高め、秘密や個人情報はmask・最小化します。

Q40

library関数が失敗時にprocess全体をsys.exitする問題は?

答え: callerがerror処理やcleanupを選べなくなる

libraryは意味のある例外をraiseし、終了判断はCLI等の境界へ任せる方が再利用しやすくなります。

Q41

ユーザー一覧を年齢の昇順、同年齢では名前の昇順に並べ替えたい。適切な方法は?

答え: sorted(users, key=lambda u: (u.age, u.name))

keyが返すtupleは左から順に比較されるため、複数項目の並べ替え条件を明確に表現できます。sortedは元のlistを変更しません。

Q42

入れ子のdictをcopy.copy()で複製後、内側のlistを変更すると元データにも反映された。理由と対策は?

答え: shallow copyは内側のobjectを共有するため、独立複製が必要ならcopy.deepcopy等を検討する

shallow copyは外側のcontainerだけを新しくし、入れ子要素への参照は共有します。deepcopyのコストや共有すべきobjectも考慮して使い分けます。

Q43

dataclassで各instanceが独立した空listを持つfieldを定義したい。適切なのは?

答え: field(default_factory=list)

default_factoryはinstance生成ごとにlistを新しく作ります。変更可能な既定値の共有を避けるために使います。

Q44

通貨の合計を扱う処理で、0.1 + 0.2のような2進浮動小数点誤差を避けたい。適切な選択は?

答え: 文字列からdecimal.Decimalを生成し、必要な丸め規則を明示する

Decimalは10進の桁と丸めを制御できます。floatから直接生成すると既存の2進誤差を取り込むため、通常は文字列や整数の最小通貨単位から生成します。

Q45

複数timezoneの利用者へ日時を提供するAPIで、保存・比較の基準を安全に扱う方針は?

答え: timezone-awareなUTC日時で保存・比較し、表示時に利用者のtimezoneへ変換する

aware datetimeでUTCを基準にすると時点を一意に扱えます。入出力のtimezoneとISO 8601形式を明示し、表示境界で変換します。

Q46

標準csv moduleでUTF-8のCSVをWindowsを含む環境で読み書きし、空行の混入を避けたい。fileの開き方は?

答え: open(path, mode, encoding='utf-8', newline='')

csv moduleへ改行処理を任せるためnewline=''を指定し、文字コードも明示します。外部仕様にBOMが必要ならutf-8-sig等を要件に応じて選びます。

Q47

設定fileを更新中にprocessが停止しても、途中まで書かれたfileを読ませたくない。基本的な更新方法は?

答え: 同じfilesystemの一時fileへ完全に書いてflush等を行い、os.replaceで置き換える

一時fileを完成させてから同一filesystem内で置換すると、読者には旧版か新版のどちらかを見せやすくなります。耐障害要件に応じてfsyncやbackupも検討します。

Q48

CLIで必須option、型変換、help message、終了codeを一貫して扱いたい。標準libraryの選択は?

答え: argparse

argparseはoption定義から解析、型変換、usage/help、入力error時の終了をまとめて扱えます。CLI境界から業務logicを分離するとtestもしやすくなります。

Q49

現代的なPython projectでbuild systemやproject metadata、基本依存関係を標準形式で管理する中心fileは?

答え: pyproject.toml

pyproject.tomlはbuild backend、project metadata、依存関係やtool設定の標準的な格納先です。lock fileの扱いは利用するpackage managerに従います。

Q50

password reset用の推測困難なtokenを生成したい。標準libraryで適切なのは?

答え: secrets.token_urlsafe()

secrets moduleは認証tokenなどsecurity用途の暗号学的に強い乱数を生成します。tokenには十分なentropy、有効期限、1回限りの利用も設計します。

Q51

applicationでpasswordを保存するときの基本方針として適切なのは?

答え: Argon2等のpassword専用のsalt付き低速hashを信頼できるlibraryで使う

password保存には攻撃者の総当たりを遅くする専用KDFとuserごとのsaltを使います。parameter更新や既存hashのrehash方針も持ちます。

Q52

複数のDB更新をすべて成功した場合だけ確定し、途中で例外が出たら元へ戻したい。適切な設計は?

答え: driverやORMのtransaction contextを使い、成功時commit・例外時rollbackする

transaction境界を明示し、context manager等でcommit・rollback・connection返却を確実にします。外部API呼出しを同一transactionへ含める場合は長時間lockにも注意します。

Q53

page token方式のHTTP APIから全recordを取得する処理で必要な実装は?

答え: 各responseのnext tokenを使って終了条件まで反復し、rate limitや重複も考慮する

pagination contractに従ってnext tokenがなくなるまで取得します。timeout、error、rate limit、再試行時の重複排除やcheckpointも要件に応じて設計します。

Q54

数GBのHTTP responseをfileへ保存するとき、memory使用量を抑える方針は?

答え: responseをstreaming modeで受け取り、一定sizeのchunkごとにfileへ書く

streamingとchunk書込みでmemory使用量を一定範囲に保てます。timeout、status、最大size、一時file、checksum、失敗時cleanupも組み合わせます。

Q55

高コスト関数へfunctools.lru_cacheを使う際、適した前提は?

答え: 同じhashable引数なら同じ結果を返し、古い結果を許容でき、maxsizeを検討している

lru_cacheは引数をkeyに結果を再利用します。純粋性、hash可能性、dataの鮮度、memory上限、必要ならcache_clearの契機を設計します。

Q56

同じ関数を多くの入力値と期待値でtestし、重複したtest codeを減らしたい。pytestで適切なのは?

答え: @pytest.mark.parametrizeでcaseを列挙する

parametrizeは1つのtest logicへ複数caseを供給し、各caseを個別に報告します。境界値や異常系を表形式で追加しやすくなります。

Q57

test用DB connectionをfixtureで作成し、test失敗時にも必ずrollback・closeしたい。pytest fixtureの設計は?

答え: fixtureでresourceを作りyieldし、yield後をtry/finally相当のcleanupにする

yield fixtureは前半でsetup、後半でteardownを表現し、testの成功・失敗にかかわらずcleanupを実行できます。fixture scopeとtest分離も合わせて設計します。

Q58

外部service clientを差し替え可能にし、特定classの継承を要求せず必要なmethodだけを型検査したい。適切なのは?

答え: typing.Protocolで必要なinterfaceを定義する

Protocolは必要な属性・methodを持つ型を構造的に受け入れます。実装を疎結合にし、fakeやadapterもstatic checkerで確認できます。

Q59

複数threadが共有dictのread-modify-writeを行い、更新が失われる。基本的な対策は?

答え: 共有状態を減らし、必要なcritical sectionはthreading.Lock等で保護する

read-modify-writeは複数操作からなり競合し得ます。lock、queue、thread-local、immutable data等から要件に合う方法を選び、lock範囲とdeadlockにも注意します。

Q60

container上のPython workerがSIGTERMを受けたとき、処理中jobを安全に終えて終了したい。設計として適切なのは?

答え: signal handlerでは停止flagを設定し、新規受付を止め、main loopでcleanupして期限内に終了する

signal handlerは小さく保ち、通常の制御flowへ停止要求を伝えます。queue受付停止、進行中処理、checkpoint、connection close、platformの猶予時間を設計します。

certdrill.dev は、LPI Japan・IPA・AWS・Microsoft Azure その他各試験団体と一切関係のない独立した非公式学習サイトです。問題・解説はオリジナルコンテンツです。