Python3エンジニア認定基礎試験 演習
勉強やり方メモ
- 模擬試験を解く
- 間違えた箇所・分かってなさそうな箇所の解説を読む・書き出す
- 出題率の高い練習問題を解いてそれぞれパスするまで繰り返す
- もう一度模擬試験を解く
- 2をやる・繰り返しミスするものに印をつける
- (安定して合格ラインに辿り着けるようになるまで繰り返す)
1. 食欲をそそってみようか
2. Pythonインタープリタの使い方
3. 気楽な入門編
📝 len()
d = 'dive\ninto\ncode\t'
print(len(d))
改行\nもタブ\tもそれぞれ1文字としてカウントされる
なので出力結果は15
📝 1つの変数に複数の値を代入するとその変数はタプル( )に格納される(リスト[ ]ではない)
a = 3
b = 4
c = 3.0 + b, 5 * a # タプルで値を2つ持つデータになる
print(c) # (7.0, 15)
📝 pythonでもprint_r()がしたい
raw文字列を出力する方法。エスケープシーケンスを付与しなくて済む
print(r'D:\home\name\python')
📝 文字列の繰り返し
s = 'dog?'
print(s * 3) #=> 'dog?dog?dog?'
pythonなら文字列を*演算子使って繰り返しできる
📝 pythonにi++, i--は存在しない
インクリメント(デクリメント)したければ↓
i = 0
while i < 4
print(i)
i+=1 # or i-=1
📝 文字列連結
total = 1000
print('「お会計は', total, '円です。」') # カンマ区切り&シングルクォーテーションで囲う
PHPのように.で文字列連結はできない
name = 'satak'
print('私の名前は' + name + 'です。」') # 連結する変数が文字列なら`+`が使える
total = 1000
print('「お会計は' + total + '円です。」') # 数値は`+`で連結できずエラーになる
📝 スライス
(wip)
4. 制御構造ツール
📝 for分にelseをくっつけて使う
n = 3
number = [[10,3],[16,3],[12,9]]
for i in range(n):
if number[i][0] // number[i][1] % 2 == 0:
print('偶数です')
break
else:
print('すべて奇数です')
一見ifブロックとインデントが揃っていなくてシンタックスエラーになりそうだけど、pythonではfor文に対するelseとして成立する
- forループが全て終了した後にelse内の処理が実行される
- forループ内のif文中でbreakが使用された場合、elseは実行されない = 逆に言えばこのケースでelseが実行されるということは、全てのループが実行されたことを意味する(チェック機構として実装する価値はありそう?)
📝 list.count()の使い方注意
num_list = [2, 4, 6, 4, 4, 2, 6]
for i in range(num_list.count(4)):
print(i, end=' ') # 0 1 2
→count()の引数に指定した要素の数を数える。↑の例では4がリストに何個入っているかを数えて数値3を返している
なのでループ回数も3回
※単にリストの要素数を数えたい時はlen(num_list)とする
5. データ構造
📝 タプル・リスト比較
| 不変 | 順序概念 | |
|---|---|---|
| タプル | ✅ | ✅ |
| リスト | ❌ | ❌ |
タプル
📝 パッキング・シーケンスアンパッキング
パッキング・・・1つの変数に複数の値を代入するとタプルとして定義できる
シーケンスアンパッキング・・・いわゆる分割代入的なもの
def add_diff(a, b):
return a + b, a - b # 2値をタプルで返却する関数
result = add_diff(3, 5)
print(result) # (8, -2)
ad, df = add_diff(3, 4)
print(ad) # 7
print(df) # -1
📝 大小比較
(1,3,5) < (1,2,3,4)
データの大きさを前からや合計では比較しません。1-3-5 と1-2-3-4 はどちらが先にくるか、と考えます。小説などのように 1章3節5項 より 1章2節3-4項 は後であるか?と考える方法もあるようです。
よって、これはFALSE
📝 zip()
zip(*iterables, strict=False)
複数のイテラブルを並行に反復処理し、各イテラブルの要素からなるタプルを生成します。
dic = [
['Noro', 'Nakao', 'Miyaoka'],
['Kimura', 'Miyashita', 'Shibata'],
['Matsumoto', 'Tanaka', 'Ivan'],
]
print(list(zip(*dic)))
上記例だとリストの内側にアンパックしながらタプルを3つ作ることになる↓
[('Noro', 'Kimura', 'Matsumoto'), ('Nakao', 'Miyashita', 'Tanaka'), ('Miyaoka', 'Shibata', 'Ivan')]
リスト
📝 リストの要素削除del()
[]にインデックスを指定して使う。全削除したい時はこんな感じ↓
dive_into_code = ['Noro', 'Nakao', 'Miyaoka', 'Miyashita', 'Shibata', 'Kimura']
del dive_into_code[:] #コロンで全消し
dive_into_code.clear() # delの全消しと同義
📝 リストの要素削除remove() はインデックス指定じゃないという話
list = [5, 3, 1, 2, 3, 4, 5, 2]
list.remove(2)
print(list) # [5, 3, 1, 3, 4, 5, 2]
→引数に該当する要素を先頭から探してきて、最初にヒットしたものを取り除いたリストを返す
📝 リスト内包表記
(wip)
6. モジュール
📝 dir()
モジュールに定義している関数などの名前をすべて確認できる。
PHPのマジック定数__DIR__のようなものとは違う
7. 入出力
📝 format()
phpのsprintf()的な使い方
print('こんにちは、{}さん'.format('satak')) # こんにちは、satakさん
print("こんにちは、{}さん".format("satak")) # 文字列埋め込み先にダブルクォーテーションが使われていても挙動は同じ
📝 浮動小数点数のフォーマット出力
print('円周率は%5.3fである。'%math.pi) # 3.142
→小数点.含め5桁で表示・小数点以下は3桁で表示する、の意。なお、小数点以下の部分は四捨五入がされるため3.141と切り捨て表示にはならない模様。
8. エラーと例外
📝 構文
try:
検証したいコードはここに書く
except 起こりうるエラーの名前:
検証したいコードで、起こりうるエラーが起きたときの処理
else:
正常終了時の処理
finally:
正常系/異常系を問わず必ず行われる処理
Pythonでは例外はスローしない、raiseする
📝 クリーンアップ動作のwith構文
例: ファイルを開いて閉じる ←閉じるまでを処理の中で保証するのがクリーンアップ
try内でwithを使って暗黙的にクリーンアップしますよ、という処理にして、finallyでの明示的なクリーンアップ処理を省略するような書き方もできる
📝 oprn()のモード指定について
公式: https://docs.python.org/ja/3/library/functions.html#open
デフォルトはmode='r'(読み込み用に開く)、-は存在しない
9. クラス
10. 標準ライブラリめぐり
📝 正規表現に関する標準モジュール: re
📝 random()とrange()
random.sample(range(1000), 5) # 例: [756, 121, 482, 264, 841]
→0~999の範囲の整数値を5つ出す
11. 標準ライブラリめぐり - PartⅡ
📝 reprlib.repr(), 組み込み関数repr()との違い
いずれも出力を見やすく文字列にフォーマットする
repr()
オブジェクトの印字可能な表現を含む文字列を返します。
reprlib.repr() 大体組み込みのrepr()と同じだが、headコマンドみたいな感じ?↓
コンテナオブジェクトの出力の長さを減らし、同時にソートもする関数です。
📝 structモジュール
バイナリデータレコードの処理を行うモジュール。
フォーマットを指定して、int ・ float ・ bool 型などから bytes 型配列の変換をおこなうことができる。
12. 仮想環境とパッケージ
13. 対話環境での入力行編集とヒストリ置換
安定して850~取れてきたので基礎試験のチャレンジはおしまい