自分が何度もPython認定試験の模試をやって特に引っかかった部分をまとめたものです。
少しでも合格率あげたい人は理解しておいた方がいいと思います。ケアレスミスで基礎レベルの問題を落としてしまった時に助かります。
Python認定試験の公式の模試はこの2つ👇
文字列、リスト、集合、辞書
文字列について
>>> 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ポイントは大文字より小文字の方が大きい。
>>> 'abc' < 'aaaa'
False
>>> ord('a')
97
>>> ord('b')
98
リスト
list.sort()
は昇順で保存される。
つまり1, 2, 3, 4, 5の順番。
list[:]
はlist.copy()
と同じ(浅いコピー)
del
を使ってリストの要素を全削除するにはdel list[:]
。
つまり
list.clear() = del list[:]
スライス
>>> 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]
集合
空の集合を作るときは
set()
{}
だけだと空の辞書ができてしまう。
集合はmutableかつiterable。
辞書
辞書にenumerate()
関数を使うと、インデックスとキーのペアをもってくる。
辞書のキーはそれぞれ一意である必要があるが、別に型は異なってもいい。
{'moji': 'mojidesu', 3: 'three', sum: 'func'}
辞書はもちろんmutable。
その他モジュール
range
>>> list(range(-3, -18, -3))
[-3, -6, -9, -12, -15]
rand
randomモジュールにrand
はない。
AttributeError: module 'random' has no attribute 'rand'
round
roundは四捨五入。
(コメントありがとうございます)
round関数では通常の四捨五入とは異なり、四捨五入する数字が5でも切り捨てが行われて0になることがある。
公式ドキュメントに次のようにあります:
注釈 浮動小数点数に対する round() の振る舞いは意外なものかもしれません: 例えば、 round(2.675, 2) は予想通りの 2.68 ではなく 2.67 を与えます。これはバグではありません: これはほとんどの小数が浮動小数点数で正確に表せないことの結果です。詳しくは 浮動小数点演算、その問題と制限 を参照してください。
小数点以下0まるめでも小数第一の0は表示される。
>>> 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+
:読み書き両用
>>> from reprlib import repr
>>> l = [i for i in range(100)]
>>> repr(l)
'[0, 1, 2, 3, 4, 5, ...]'
reprlib.Repr().maxlist = 6
(デフォルトは6個)
第三引数に注意
replace('対象', '置換後の文字', 置き換える個数)
from datetime import date
deque
のpop
、popleft
に引数を指定することはできない。
だってdeque
は要素の並びに対して、両端の要素を操作することを目的としたものだから。
また、空のオブジェクトに対してpop
、popleft
をやるとエラーが返る(これはdeque
に限らずリストでも)。
proccessin
モジュールは描画を得意としたモジュール。時間の計測などは行わない。
バイナリのデータレコードを処理するモジュールはstruct
文章
関数を呼び出す際は
位置引数が先、キーワード引数が後
のルール。
リスト、タプル、集合、辞書は全てfor文に渡せるiterable。
国際的な環境で使用するならPythonデフォルトの”UTF-8”か”ASCII”が常に最良。
Pythonに標準モジュールのライブラリが付属する。
エラーはパーサにおける矢印の前のトークンが原因。
型が不適切な時のエラーはValueError。
Docstringは大文字で始まり、ピリオドで終わる。
アンダースコア_
はインタプリタで最後に表示された値が格納されてる。
and
やor
を短絡演算子という。
「名前空間」とは、名前とオブジェクトの対応付け。
名前空間に関して覚えてくことはただ一つ。
異なる名前空間同士の名前には一切関わりがない
ということ。
モジュール読み込みを高速化するためにPythonはコンパイル済みの各モジュールを
__pychache__ディレクトリ
のmodule.バージョン番号.pyc
としてキャッシュする(特に拡張子.pycもポイント)。
インタープリタ起動はのオプションは「-cmd」じゃなくて「-c」。
スクリプトファイルを走らせた後に対話モードに入りたかったら、スクリプトファイルの前に-i
オプションをつけて実行する。
.python_history
にヒストリがあって、インタープリタセッションで利用できる。
spam
というモジュールをインポートするとき、インタープリタはまずその名前のビルトインモジュールを探す。
なければspam.py
という名のファイルをsys.path
にあるディレクトリのリストから探す。
sys.path
は以下の場所に初期化される。
- 入力されたスクリプトのあるディレクトリ(またはカレントディレクトリ)
- PYTHONPATH(shell変数のPATH)
- インストールごとのデフォルト
※ ここにシンボリックリンクは含まれない
実行中のスクリプトのあるディレクトリは検索パスの最初、標準ライブラリのパスより前方に置かれる。
pipについて
pipはデフォルトではPython Package Indexからパッケージをインストールする。
pipでパッケージをアップグレードするには
pip install -U パッケージ名
または
pip instal --upgrade パッケージ名
いずれにせよアップグレードでも"install"のワードは必要。
pipでバージョン指定してしてパッケージインストールする際は
pip install bottole == 0.12.19
イコール記号が2つ必要。
pip list
は仮想環境にインストールされた全パッケージを表示。pip freeze
はインストールされた全パッケージをpip install
が解釈する形で表示してくれる。
メソッドまとめ
リスト
- append
- extend
- insert
- remove(要素指定)
- pop(インデックス指定)
- del(インデックス指定)←リストそのものを指定するとそのリストを削除
- clear(全要素クリア)
- index(要素を指定):インデックスを返す
- count(要素を指定):個数を返す
sort(昇順)
reverse(降順)
集合
-
add(ただ加えるだけ)
-
remove(要素を指定)←エラー発生あり
-
discard(要素を指定)←エラー発生なし(Noneが返るのみ)
集合の要素はhashableでないといけない。←集合は重複をまとめる際にhash値を用いてを比較するため。
同じように考えて、重複が許されない辞書のキーもhashableである必要がある。