Python認定試験チートシート

自分が何度もPython認定試験の模試をやって特に引っかかった部分をまとめたものです。


少しでも合格率あげたい人は理解しておいた方がいいと思います。ケアレスミスで基礎レベルの問題を落としてしまった時に助かります。

Python認定試験の公式の模試はこの２つ👇

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

https://exam.diveintocode.jp/exam
 
# 文字列、リスト、集合、辞書

## 文字列について


```Python
>>> zen = 'NowIsBetterThanNever'
>>> zen[-3: -1]
've'

>>> zen[10000000000 : ]
''

>>> zen[0] = 'X'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>>

# 文字列はimmutableだからインデックスで指定して置き換えることはできない

>>> 'test\n'
'test\n'

>>> print('test\nnext')
test
next

# ゆえにlen()関数では「\n」を一文字をとカウントする
>>> len('Hello\nWorld\n')
12

# zfillは+や-の記号も含む
>>> '+9'.zfill(5)
'+0009'	
```

文字列同士の比較はUnicodeポイントの大・小で比べる。

（Unicodeポイントはord()関数で見れる。）

- アルファベット順にUnicodeポイントは大きくなる。
- Unicodeポイントは大文字より小文字の方が大きい。

```Python
>>> 'abc' < 'aaaa'
False

>>> ord('a')
97
>>> ord('b')
98
```

## リスト

`list.sort()`は昇順で保存される。

つまり1, 2, 3, 4, 5の順番。

<br><br>

`list[:]`は`list.copy()`と同じ（浅いコピー）

<br><br>

`del`を使ってリストの要素を全削除するには`del list[:]`。

つまり

```Python
list.clear() = del list[:]
```

## スライス

```Python
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> a[-1]
10

>>> a[:-1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> a[::-2]
[10, 8, 6, 4, 2]

>>> a[::-3]
[10, 7, 4, 1]
```

## 集合

空の集合を作るときは

```Python
set()
```

`{}`だけだと**空の辞書**ができてしまう。

集合はmutableかつiterable。

## 辞書

辞書に`enumerate()`関数を使うと、インデックスとキーのペアをもってくる。

辞書のキーはそれぞれ一意である必要があるが、別に型は異なってもいい。

```Python
{'moji': 'mojidesu', 3: 'three', sum: 'func'}
```
辞書はもちろんmutable。

# その他モジュール

## range

```Python
>>> list(range(-3, -18, -3))
[-3, -6, -9, -12, -15]
```

## rand

randomモジュールに`rand`はない。

```Python
AttributeError: module 'random' has no attribute 'rand'
```

## round

~~roundは四捨五入。~~

（コメントありがとうございます）

**round関数では通常の四捨五入とは異なり、四捨五入する数字が5でも切り捨てが行われて0になることがある**。

公式ドキュメントに次のようにあります：

> 注釈 浮動小数点数に対する round() の振る舞いは意外なものかもしれません: 例えば、 round(2.675, 2) は予想通りの 2.68 ではなく 2.67 を与えます。これはバグではありません: これはほとんどの小数が浮動小数点数で正確に表せないことの結果です。詳しくは 浮動小数点演算、その問題と制限 を参照してください。

小数点以下0まるめでも小数第一の0は表示される。

```Python
>>> round(3.14152, 3)
3.142

>>> round(2.675 , 2)
2.67

>>> round(2.71828, 0)
3.0

>>> print('%5.3f' % 3.141592)
3.142

>>> print('%7.5f' % 3.141592) 
3.14159

>>> print('%5.2f' % 1)
1.00
```

`%A.Bf`の部分では

- A：小数点もカウントした全体の桁数
- B：小数点以下に続く数字の個数（この時四捨五入して丸める）

## モジュールの破片

ファイルをオープンする時のモード
- `a`：追記
- `r+`：読み書き両用

<br><br>

```Python
>>> from reprlib import repr
>>> l = [i for i in range(100)]
>>> repr(l)
'[0, 1, 2, 3, 4, 5, ...]'
```

`reprlib.Repr().maxlist = 6` （デフォルトは6個）

<br><br>

第三引数に注意

```Python
replace('対象', '置換後の文字', 置き換える個数)
```

<br><br>

```python
from datetime import date
```

<br><br>

`deque`の`pop`、`popleft`に引数を指定することはできない。

だって`deque`は要素の並びに対して、両端の要素を操作することを目的としたものだから。

また、空のオブジェクトに対して`pop`、`popleft`をやるとエラーが返る（これは`deque`に限らずリストでも）。

<br><br>

`proccessin`モジュールは描画を得意としたモジュール。時間の計測などは行わない。

<br><br>

バイナリのデータレコードを処理するモジュールは`struct`

# 文章

関数を呼び出す際は

位置引数が先、キーワード引数が後

のルール。

<br><br>

リスト、タプル、集合、辞書は全てfor文に渡せるiterable。

<br><br>

国際的な環境で使用するならPythonデフォルトの”UTF-8”か”ASCII”が常に最良。

<br><br>

Pythonに標準モジュールのライブラリが付属する。

<br><br>

エラーはパーサにおける矢印の前のトークンが原因。

型が不適切な時のエラーは**ValueError**。

<br><br>


Docstringは大文字で始まり、ピリオドで終わる。

<br><br>

アンダースコア`_`はインタプリタで最後に表示された値が格納されてる。

<br><br>

`and`や`or`を**短絡演算子**という。

<br><br>

「名前空間」とは、名前とオブジェクトの対応付け。

名前空間に関して覚えてくことはただ一つ。

**異なる名前空間同士の名前には一切関わりがない**

ということ。

<br><br>

モジュール読み込みを高速化するためにPythonはコンパイル済みの各モジュールを

`__pychache__ディレクトリ`の`module.バージョン番号.pyc`

としてキャッシュする（特に拡張子.pycもポイント）。

<br><br>

インタープリタ起動はのオプションは「-cmd」じゃなくて「-c」。

<br><br>

スクリプトファイルを走らせた後に対話モードに入りたかったら、スクリプトファイルの前に`-i`オプションをつけて実行する。

<br><br>

`.python_history`にヒストリがあって、インタープリタセッションで利用できる。

<br><br>

`spam`というモジュールをインポートするとき、インタープリタはまずその名前のビルトインモジュールを探す。

なければ`spam.py`という名のファイルを`sys.path`にあるディレクトリのリストから探す。

<br><br>

`sys.path`は以下の場所に初期化される。

- 入力されたスクリプトのあるディレクトリ（またはカレントディレクトリ）
- PYTHONPATH（shell変数のPATH）
- インストールごとのデフォルト


※ **ここにシンボリックリンクは含まれない**

<br><br>

実行中のスクリプトのあるディレクトリは検索パスの最初、標準ライブラリのパスより前方に置かれる。

# pipについて

pipはデフォルトではPython Package Indexからパッケージをインストールする。

pipでパッケージをアップグレードするには

```
pip install -U パッケージ名
```
または
```
pip instal --upgrade パッケージ名
```

いずれにせよ**アップグレードでも"install"のワードは必要**。

pipでバージョン指定してしてパッケージインストールする際は

```
pip install bottole == 0.12.19
```
イコール記号が２つ必要。

<br><br>

`pip list`は仮想環境にインストールされた全パッケージを表示。`pip freeze`はインストールされた全パッケージを`pip install`が解釈する形で表示してくれる。


# メソッドまとめ

## リスト

- append
- extend
- insert

<br><br>

- remove（要素指定）
- pop（インデックス指定）
- del（インデックス指定）←リストそのものを指定するとそのリストを削除
- clear（全要素クリア）

<br><br>

- index（要素を指定）：インデックスを返す
- count（要素を指定）：個数を返す

<br><br>

sort（昇順）
reverse（降順）

## 集合

- add（ただ加えるだけ）

- remove（要素を指定）←エラー発生あり
- discard（要素を指定）←エラー発生なし（Noneが返るのみ）

<br><br>

集合の要素はhashableでないといけない。←集合は重複をまとめる際にhash値を用いてを比較するため。

同じように考えて、重複が許されない辞書のキーもhashableである必要がある。