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

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


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

https://study.prime-strategy.co.jp/#exam-list

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/fe18b087-347b-2280-adc6-055ba659c23f.png)

3回分あるようなのですべて行っておきたいと思います。

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

7 次の変数Zenに関して指定した場合、実行時にエラーとなるものはどれか。

Zen = 'SimpleIsBetterThanComplex'

あなたの回答: Zen[1000:]
正答: Zen[0] = 'J'

インデックス1000から最後まで取得するという意味だからエラーじゃないかな？と思ったのですが、違うようでした。というかそもそも文字列は改変できないって自分でまとめてました。

https://qiita.com/y-matsunaga/items/549ddff4b45395bf6b30#%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9

スライスの範囲外でググったらこのように出てきました。理解しました。
>範囲外を指定した場合
要素数を超える位置を指定してもエラーにはならず無視される。

11 次のコードの実行結果として正しいものはどれか。

for i in range(-10, -30, -5):
    print(i, end=", ")
あなたの回答: -10, -15, -20, -25, -30,
正答: -10, -15, -20, -25,

意味的には-10から-30まで-5づつ加算していく。
そしてRange関数は、指定した最後の部分は含まれない。
理解はしているのに間違えてます。焦りでしょう。本番ではやらないように気を付けよう。

17 次の記述のうち、正しいものはどれか。
あなたの回答: 演算子の周囲やカンマの後ろ、カッコの内側にもスペースを入れ読みやすさに配慮すべきである。
正答: 国際的な環境で使用する予定のコードでは、PythonのデフォルトであるUTF-8か、さらにプレーンなASCIIが常に最良である。

問題文すべて載ってなくてすみません、追えないのでお許しください。
これ悩んだんですが、ASCIIがこれ違うんじゃないかなと思って外しました。
とはいえ、カッコ内にスペース入れるっけとも悩んでました。

PYthonチュートリアルのコーディングスタイルに答えがありました。

https://docs.python.org/ja/3/tutorial/controlflow.html#intermezzo-coding-style

>演算子の前後とコンマの後には空白を入れ、括弧類のすぐ内側には空白を入れないこと: a = f(1, 2) + g(3, 4)。

>同様に、ほんの少しでも他の言語を話す人がコードを読んだりメンテナンスする可能性があるのであれば、非 ASCII 文字も識別子に使うべきではありません。

22 次のコードの実行結果として正しいものはどれか。

Zen = 'ExplicitIsBetterThanImplicit'
print(Zen[1:20:3])
あなたの回答: EiItT
正答: xitBtTn

これも焦ったかも。
１から１９を３づつ増やしていく。スライスの開始位置を間違えてました。
147の時点で答えが出てます。

ExplicitIsBetterThanImplicit
0123456789012345678901234567

24 次のうち対話モードで入力したときに「True」が返されるのはどれか。
あなたの回答: (1, 2) > (1, 2, -1)
正答: 'PHP' < 'Perl' < 'Python'

タプルの場合、確か同じインデックスの要素同士を比較していき、大きさを決めているとかだった気がしますが、インデックスが同じじゃなかったら同じまでしか評価しないのか。

https://www.javadrive.jp/python/if/index4.html

こちらの記事のタプルやリストの比較を見たところ、要素の長さで大小が決まるようでした。
下記のようなルールもあるようです。
>数字は、文字の0が最小、9が最大(0 < 1 < 2 < ... < 9)
アルファベットでは、a が最小、z が最大 (a < b < c < ... < z)
大文字は小文字より小さい (A < a, B < b, ...)
数字は、アルファベットよりも小さい (0 < 9 < A)

26 モジュールが定義している名前を対話モードで確認したい。次のスクリプトの２行目【A】に入るものとして正しいものはどれか。

import sys
【A】
あなたの回答: dir(mod)
正答: dir(sys)

https://docs.python.org/ja/3.6/tutorial/modules.html#the-dir-function

>組込み関数 dir() は、あるモジュールがどんな名前を定義しているか調べるために使われます。 dir() はソートされた文字列のリストを返します:

Dir関数はモジュール名を調べる。問題は定義しているモジュールの名前を確認したい。
そのままですが、定義しているsysを引数に渡せばよかったってことでした。

27.次のコードの実行結果として正しいものはどれか。

import math
print('{1:.3f}, {0:.5f}'.format(math.pi, math.e))
あなたの回答: 1:3.141f, 0:2.71828f
正答: 2.718, 3.14159

これは意味わからなかったので適当に答えましたね(笑)
piが円周率なのはわかりますが、eってなんぞ。
公式ドキュメントはだめだ。情報が多すぎる。。。
調べたら、
>自然対数の底（ネイピア数）: math.e
```python:python
import math

print(math.e)
# 2.718281828459045
```

>モジュールには関数だけではなく、定数も用意されているものがあります。mathモジュールの場合は、「pi」と「e」という2つの定数が用意されています。

定数は2つあるようなので覚えておきたいと思います。
2.71と3.14

29 エラーと例外に関する次の記述のうち誤っているものはどれか。
あなたの回答: [Ctrl]+[C]キーなどでユーザーがプログラムに割り込みをかけると、KeyboardInterrupt例外が送出される。
正答: パーサ（構文解釈器）は違反のある行を表示し、最後にエラーが検知された点を小さな矢印で示す。エラーは矢印より後のトークンが原因である。

>パーサは違反の起きている行を表示し、小さな「矢印」を表示して、行中でエラーが検出された最初の位置を示します。エラーは矢印の 直前の トークンでひき起こされています (または、少なくともそこで検出されています)。上記の例では、エラーは関数 print() で検出されています。コロン (':') がその前に無いからです。入力がスクリプトから来ている場合は、どこを見ればよいか分かるようにファイル名と行番号が出力されます。

エラー箇所の最初の位置を^で示す。

34 コマンドライン上で「python3 script.py one two three four five」を実行したときに、以下の結果を得たい。コード2行目の【A】に入るものとして正しいものはどれか。

[ 実行結果 ]
['one', 'two', 'three']

[ コード ]
import sys
print(【A】)
あなたの回答: sys.args[1:4]
正答: sys.argv[1:4]

https://www.tech-teacher.jp/blog/python-commandline/#:~:text=%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E5%BC%95%E6%95%B0%E3%81%A8%E3%81%AF%E3%80%81Python%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%AE%9F%E8%A1%8C,%E3%81%AB%E3%82%88%E3%81%8F%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

コマンドライン引数を受け取るときは、sys.argvで受け取る

35 次の正規表現を用いたコードの【A】の部分に入れたときエラーとなるものはどれか。

import re
prog = re.compile('(K|S)us(a|u)n(a|o)(o|m)?g?i?(saya)?', re.IGNORECASE)
【A】
print(ret[0])
あなたの回答: ret = prog.search('SUSANOO')
正答: ret = prog.search('Kusaneiro')

reモジュールが、正規表現なのは知っていたけど、問題が何を言っているのか理解できなかったです。

>IGNORECASE
大文字・小文字を区別しないマッチングを行います; [A-Z] のような正規表現は小文字にもマッチします。 re.ASCII フラグを使い、非 ASCII マッチが無効化されていない限り、 (Ü が ü にマッチするような) 完全な Unicode マッチングも有効です。 re.LOCALE フラグも一緒に使われていない限り、現在のロケールがこのフラグの効果を変更することはありません。 インラインフラグの (?i) に相当します。

とりあえず、IGNORECASEで大文字小文字を区別しないことが分かりました。
大文字小文字につられて回答したので、次は大丈夫。

36 statisticsモジュールを使って、データの平均、中央値、分散を求めたい。次のコードの【A】【B】【C】に入りうる組み合わせとして正しいものはどれか。

import statistics
data = [1,10,15,20,25,30,35]
rslt1 = statistics.【A】(data)
rslt2 = statistics.【B】(data)
rslt3 = statistics.【C】(data)
print(rslt1, rslt2, rslt3)
あなたの回答: average median variance
正答: mean median variance

ExcelでAVERAGEとMEDIANを使用したことがあったのでつられました。
Pythonでは、平均はmeanで求める。

37 今日の日付を得たい場合、次のコード1行目の【A】に入る適切なものはどれか。

【A】
now = date.today()
print(now)
あなたの回答: import datetime from date
正答: from datetime import date

https://www.mathpython.com/ja/python-time-now/

datetimeのdate.todayで今日の日付
ditetimeのdatetime.todayで今の時間

38 loggingモジュールのメッセージの優先度として正しいものはどれか。左から順に優先度が高いものとする。
あなたの回答: CRITICAL、WARNING、ERROR、INFO、DEBUG
正答: CRITICAL、ERROR、WARNING、INFO、DEBUG

| レベル | いつ使うか |
|:-:|:-:|
|DEBUG|おもに問題を診断するときにのみ関心があるような、詳細な情報。|
|INFO|想定された通りのことが起こったことの確認。|
|WARNING|想定外のことが起こった、または問題が近く起こりそうである (例えば、'disk space low') ことの表示。|
|ERROR|より重大な問題により、ソフトウェアがある機能を実行できないこと。|
|CRITICAL|プログラム自体が実行を続けられないことを表す、重大なエラー。|

WARNINGは問題が起こりそうで、ERRORは問題が起こったということ。

40 次の記述に関して誤っているものはどれか。
あなたの回答: 拡張された対話型インタープリタとしてbpythonがある。これはタブ補完、オブジェクト探索、高度なヒストリ管理などの機能を持つ。
正答: デフォルト設定ではユーザーディレクトリの「.pyhistory」ファイルにヒストリが保存される。ヒストリは対話型インタープリタセッションで利用できる。

.python_historyに保存される。
頻出な気がするので覚える。


### 終わり
後半全然取れなかったです。
次、第二回を受けるときは70%超えるといいなと思います。
また結果共有と間違い問題を調べるのを行いたいと思います。
個人的には、人向けに記事を作成するつもりじゃなくても、公開する以上間違っているといけないと、何度も見直しをするのでとても頭に入りやすい勉強法だと思っています。
無事合格したい～。