Open14

Python3エンジニア認定基礎試験 演習

sataksatak

勉強やり方メモ

  1. 模擬試験を解く
  2. 間違えた箇所・分かってなさそうな箇所の解説を読む・書き出す
  3. 出題率の高い練習問題を解いてそれぞれパスするまで繰り返す
  4. もう一度模擬試験を解く
  5. 2をやる・繰り返しミスするものに印をつける
  6. (安定して合格ラインに辿り着けるようになるまで繰り返す)

1. 食欲をそそってみようか

sataksatak

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)

sataksatak

4. 制御構造ツール

📝 for分にelseをくっつけて使う

参考: Pythonで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)とする

sataksatak

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)

sataksatak

6. モジュール

📝 dir()

モジュールに定義している関数などの名前をすべて確認できる。
PHPのマジック定数__DIR__のようなものとは違う

sataksatak

7. 入出力

📝 format()

phpのsprintf()的な使い方

print('こんにちは、{}さん'.format('satak')) # こんにちは、satakさん
print("こんにちは、{}さん".format("satak")) # 文字列埋め込み先にダブルクォーテーションが使われていても挙動は同じ

📝 浮動小数点数のフォーマット出力

print('円周率は%5.3fである。'%math.pi) # 3.142

→小数点.含め5桁で表示・小数点以下は3桁で表示する、の意。なお、小数点以下の部分は四捨五入がされるため3.141と切り捨て表示にはならない模様。


sataksatak

8. エラーと例外

📝 構文

try:
    検証したいコードはここに書く
except 起こりうるエラーの名前:
    検証したいコードで、起こりうるエラーが起きたときの処理
else: 
    正常終了時の処理
finally:
    正常系/異常系を問わず必ず行われる処理

Pythonでは例外はスローしない、raiseする


📝 クリーンアップ動作のwith構文

例: ファイルを開いて閉じる ←閉じるまでを処理の中で保証するのがクリーンアップ
try内でwithを使って暗黙的にクリーンアップしますよ、という処理にして、finallyでの明示的なクリーンアップ処理を省略するような書き方もできる


📝 oprn()のモード指定について

公式: https://docs.python.org/ja/3/library/functions.html#open
デフォルトはmode='r'(読み込み用に開く)、-は存在しない

sataksatak

10. 標準ライブラリめぐり

📝 正規表現に関する標準モジュール: re


📝 random()とrange()

random.sample(range(1000), 5) # 例: [756, 121, 482, 264, 841]

→0~999の範囲の整数値を5つ出す


sataksatak

11. 標準ライブラリめぐり - PartⅡ

📝 reprlib.repr(), 組み込み関数repr()との違い

いずれも出力を見やすく文字列にフォーマットする

repr()

オブジェクトの印字可能な表現を含む文字列を返します。

reprlib.repr() 大体組み込みのrepr()と同じだが、headコマンドみたいな感じ?↓

コンテナオブジェクトの出力の長さを減らし、同時にソートもする関数です。


📝 structモジュール

バイナリデータレコードの処理を行うモジュール。
フォーマットを指定して、int ・ float ・ bool 型などから bytes 型配列の変換をおこなうことができる。

sataksatak

13. 対話環境での入力行編集とヒストリ置換

sataksatak

安定して850~取れてきたので基礎試験のチャレンジはおしまい