Python3 模擬試験のミス問題を調べて理解を深める3

### 初めに
現在Pythonの試験勉強を始めて１か月ほど。
残り２週間ほどで試験を受けるつもりなので、模擬試験をこなしてミス問題を復習し、理解を深めていけるようにしたい。
※自分用なのですべての解説を網羅させるつもりではないです。
模擬試験の結果を赤裸々に載せていくので、どんな問題を間違えているのか気になる方は見てもらえればと思います(笑)

模擬試験は無料のPRIME STUDYというサイトで行っています。
模擬試験の結果がメールで届き、正誤を教えてくれるので理解ができていない部分に関してフォローできるので便利だと思いました。

https://study.prime-strategy.co.jp

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/9433900e-f01d-b745-413b-569079c837fc.png)

前々回の第一回試験の結果（初見）

>受験日2022/9/1
第1回 Python 3 基礎 模擬試験 を受験いただきありがとうございました。
あなたのスコアは 65 点 / 100点満点です。

前回の第二回試験の結果(受験2回目)

>受験日 2022/9/6
第2回 Python 3 基礎 模擬試験 を受験いただきありがとうございました。
あなたのスコアは 92.5 点 / 100点満点です。

### 第3回模擬試験結果(初見)

>受験日 2022/9/10
第3回 Python 3 基礎 模擬試験 を受験いただきありがとうございました。
あなたのスコアは 70 点 / 100点満点です。

順調なのかわかりませんが、何とか初見で合格圏内ではあります！

ミス問題について理解が及んでいない箇所についてを調べていきたいと思います。

2.Pythonインタープリタに関する次の記述のうち、誤っているものはどれか。
あなたの回答: 
対話モードの終了方法には、関数の入力によるものと、キー操作によるものとがある。前者の具体的な方法は、quit()の入力である。後者の具体的な方法は、ファイル終端キャラクタの入力である。
正答: 
インタープリタの起動方法として、「python -cmd コマンド [引数] …」という方法があり、例えば「python -cmd 'print("hello")'」を実行すると、「hello」が出力される。

**ファイル終端文字が何なのか**わからなかったです。

https://docs.python.org/ja/3/tutorial/interpreter.html

>ファイル終端文字 (Unixでは Control-D 、DOS や Windows では Control-Z) を一次プロンプト (訳注: '>>>' のこと) に入力すると、インタプリタが終了ステータス 0 で終了します。もしこの操作がうまく働かないなら、コマンド: quit() と入力すればインタプリタを終了できます。

なるほど、キー割り込みのことをファイル終端文字というみたいでした！
ただCtrl-Cだと思ったら違うようですね。

Ctrl+C → 実行中の処理を強制終了（無限ループなど）
Ctrl+Z →Windowsで、Pythonインタプリタから抜ける（quit()と同じ）
Ctrl+D →Unix（Mac等）でPythonインタプリタから抜ける（quit()と同じ）


16.次の結果を得たい場合に、コード【A】に入るものとして適切なものはどれか。

[ 実行結果 ]
[(2, 'a'), (3, 'b'), (1, 'c')]

[ コード ]
pairs = [(3, 'b'),(1, 'c'),(2, 'a')]
pairs.sort(key =【A】)
print(pairs)
あなたの回答: lambda arg[1] : arg
正答: lambda arg : arg[1]

とりあえず、2番目のキー（小文字アルファベット）でソートしたいとの意図はくみ取れましたが、全然意味わかんなかったです。。。
ここで登場する場合のスライス（:）がなんなのか理解できていなかったので、2番目の引数以降をソートするという意味でlambda arg[1] : argと回答しましたが違ったようです。

https://techacademy.jp/magazine/30597

>Lambdaは無名関数のことを指します。
よく使われるdef関数とは異なり、名前の通り関数に名前をつける事なく使用する事ができます。
この関数ではいくつでもパラメータを与えることができますが、たった一つの式しか持たせることができません。if-else文を使うことも可能ですが、if-elif-else等は使う事ができません。

lambda式の例
a = lambda x : x + 10
print(a(3))
 

実行結果
13

>lambda式の書式について
lambda式の書き方は、以下のように記述します。
「lambda 引数: 式」
引数は複数与えることもでき、引数がなくても使用可能です。
引数がない場合は、
「lambda: 式」
のように書けば問題ありません。

(:)はスライスじゃなかったんだ。

lambda arg : arg[1]
のように記載することで、ソートする引数（arg）は、2番目の引数(arg[1])だよ
という意味合いだということが理解できました！

19.コードAの1行目を代替するコードBがある。コードBの【A】～【C】のうち、【A】と【B】に入るものとして正しいものはどれか。

[ コードA ]
cubes = [ a ** 3 for a in range(5)]
print(cubes)

[ コードB ]
cubes = 【A】(【B】(【C】 a: a ** 3, range(5)))
あなたの回答: 
【A】list　【B】loop
正答: 
【A】list　【B】map

普通の構文からリスト内包表記にするのはある程度分かったんですが、逆がよく間違えます。というより、分解するにあたってどの関数を使うかの知識がなかったです。

listはわかるので、mapについてを調べる。

>map関数とは、リストやタプルなどの各値に対して、指定した関数を使うことができるものです。

こちらの記事がわかりやすかったです。
独自関数の部分がイメージわきやすかったです。

https://qiita.com/conf8o/items/0cb02bc504b51af09099#%E7%8B%AC%E8%87%AA%E9%96%A2%E6%95%B0

21.次のような結果を得たい場合に、コードの2行目（★印の行）を代替するものとして正しいものはどれか。

[ 実行結果 ]
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

[コード]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
power = [tuple(row[i] for row in matrix) for i in range(3)] …★

print(power)
あなたの回答: 
power = zip[*matrix]
正答:
power = list(zip(*matrix))

zip関数は複数のリストをタプルで返してくれる関数なのは知っていたのですが、それをリストで返すためにlistでくくってやってるってことでしたか。

23.データ構造に関する次の記述のうち誤っているものはどれか。
あなたの回答: 
ディクショナリは変更可能（mutable）であるが、キーの型は変更不能（immutable）であり、その値は一意でなければならない。
正答: 
ディクショナリにループをかけるときにenumerate()関数を使うと、キーとそれに対応した値を同時に得られる。

enumerate()関数ではディクショナリにループをかける場合、インデックスとキーを返すんでした。値にアクセスするには
```python
d = {'key1': 110, 'key2': 270, 'key3': 350}
 
for i, (key, value) in enumerate(d.items()):
    print(i, key, value)  # ループインデックスとkeyと値が出力
```
のようにitems()を使用しないと取得できないです。

25.モジュールに関する次の記述のうち、正しいものはどれか。
あなたの回答: 
モジュール読み込みの高速化のため、Pythonはコンパイル済みのモジュールを「__python_cache__」ディレクトリにmodule.バージョン名.pyの名前でキャッシュする。
正答: 
実行中のスクリプトのあるディレクトリは、検索パスの最初、標準ライブラリのパスよりも前方に置かれる。

https://docs.python.org/ja/3.7/tutorial/modules.html#compiled-python-files

>モジュールの読み込みを高速化するため、Python はコンパイル済みの各モジュールを __pycache__ ディレクトリの module.version.pyc ファイルとしてキャッシュします。

.pyにcが足りなかったようです。

https://docs.python.org/ja/3.7/tutorial/modules.html#the-module-search-path

>初期化された後、 Python プログラムは sys.path を修正することができます。スクリプトファイルを含むディレクトリが検索パスの先頭、標準ライブラリパスよりも前に追加されます。

と記載がありました。太字でもない。。。

26.あるディレクトリを、パッケージを含むものとして扱わせるために必要とされるファイルは次のうちどれか。
あなたの回答:
 __package__.py
正答:
 __init__.py

下記の記事が参考になりました！

https://qiita.com/FN_Programming/items/2dcabc93365a62397afe

36.モジュールに関する次の記述のうち誤っているものはどれか。
あなたの回答: 
statisticsモジュールを使うと、数値データの基本統計量（平均、中央値、分散など）を取得することができる。
正答: 
processingモジュールを使うと、コード処理の実行時間を計測できる。

数学の処理はmathモジュールじゃなかったかなということでstatisticsの選択肢を外してしまいました。

https://docs.python.org/ja/3/library/statistics.html

難しそうなことがいっぱい書いてありましたが、分析系のモジュールだということは理解できました！

Processingはなんぞ。

https://techacademy.jp/magazine/35730

>Processingとは、電子アートやビジュアルデザインに特化したプログラミング言語で比較的簡単なコードで視覚的に実行結果が確認できるためプログラミング初心者の勉強などにおすすめの言語です。
また、近年のデジタルアートの普及により注目を集めているプログラムになります。
開発当初はプログラミング言語”JAVA”をベースに開発されたものですが、現在はPythonでもProseccingが使用できるようになっています。

全然時間計測とは関係ありませんでした。

### 終わり
今回問題をよく読んでいたら正解できたものは省きました！
それと、模擬試験をこなしてきて問題を解くペースが格段に上がりました。
試験まで残り1週間なので引き続き１～３の模擬試験を周回して試験に臨みたいと思います！

そして2回目の模擬試験3の結果・・・

>受験日 2022/9/11
第3回 Python 3 基礎 模擬試験 を受験いただきありがとうございました。
あなたのスコアは 97.5 点 / 100点満点です。

一問取りこぼし。。。


37.今日の日付を次の実行結果のように得たい場合、スクリプトの1行目【A】と2行目の【B】に入る適切なものはどれか。

[ 実行結果 ]
2020-07-02

[ スクリプト ]
【A】
today = 【B】
print(today)
あなたの回答: **No Answer Provided**
正答: 【A】from datetime import date　 【B】date.today()

まさかの解答忘れ。