新卒エンジニアが【Pythonエンジニア認定基礎試験】の模試を受けてみたら、、、

今回普段自分が使っているPythonの基礎をしっかりと勉強したことがなかったので、きっかけとして模試をとりあえず受けてみました！

しかし、結果は、、、、






55点／100点満点


基礎を怠っているのがバレバレでした。。

70%が合格ラインなので届きませんでした(泣)

再来週に試験を受けるので、模試の間違えたところをチュートリアルを読みながら理解を深めたいと思います！

目指せ合格！！！！！



↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
◆模試で間違えたところの記録◆

・プログラムの冒頭で「# coding: （エンコーディング方式）」のようにすると、デフォルト以外のエンコーディングを使うことも可能

・"/"はfloat型、"//"は整数値を返す


【format】
・引数の順番を指定
```test1.py
print ('{0}, {1}'.format(e, f))
print(e,f)と同義
```
・小数点の桁数指定
```test2.py
num = 1234.567
result = "{:.2f}".format(num)
 
print(result)
#1234.56
```

・パーセント表示
```test3.py
num = 0.2542
result = "{:%}".format(num)
 
print(result)
#25.420000%(デフォルト6桁)
```

・表示位置
```test4.py
str1 = 'Hello'
str2 = 'world'
str3 = 'Samurai'
print('{0:<10} {1:^10} {2:>10}'.format(str1,str2,str3))

#Hello        world       Samurai
#<：左詰め、>：右詰め、^：中央
```

・ゼロ埋め
```test6.py
num = 123
result = '{0:05d}'.format(num)
 
print(result)
#00123(05dが5桁で空白を0)

・桁区切り
```test7.py
a = 1234567890
print('{:,}'.format(a))
#1,234,567,890
```

・有効桁数
```test8.py
a = 12345.67890
print('{:.6g}'.format(a))
#12345.7
```

【変数の同時代入】
同時代入するとき、aの値代入後にそのaの値を使うと思っていたが、実際は同時なので影響がない。
なので一回目のループはa=1,b=0(初期のaの値、この直前のa=1は同時代入なので影響されない)+1=1
```test9.py
a, b = 0, 1
while b < 10:
print(b, end=',')
a, b = b, a+b
#1,1,2,3,5,8
```

【range】
range(-10,-30,-5)だと最後の30は含まない

【enumerate】
各データにインデックスつけられる
辞書型はキーの値
```test10.py
my_text = 'まいど'
my_array = [ '1番目', '2番目', '3番目']
my_tuple = ('1番目', '2番目', '3番目')
my_dict = {'No.1': 'first', 'No.2': 'second', 'No.3': 'third'}
print( list(enumerate(my_text)) ) 
print( list(enumerate(my_array)) ) 
print( list(enumerate(my_tuple)) ) 
print( list(enumerate(my_dict, 100)) ) 

#[(0, 'ま'), (1, 'い'), (2, 'ど')]
#[(0, '1番目'), (1, '2番目'), (2, '3番目')]
#[(0, '1番目'), (1, '2番目'), (2, '3番目')]
#[(100, 'No.1'), (101, 'No.2'), (102, 'No.3')]
```

【デフォルトの引数】
デフォルト値は、関数が定義された時点で、関数を 定義している 側のスコープ (scope) で評価される
```test11.py
i = 5
i = 6

def f(arg = i):
    i = 7
    print(arg)
    print(i)

i = 8
i = 9

f()

#6(aug定義された時点でのiの値)
#7(関数内で更新されたiの値)
```

【キーワード引数の更新】
キーワード引数はあくまで初期値であって二回目以降使用するときは引数を使って代入できると思われる。
```test12.py
def culc(a, b=1, squares=[], cubes=[]):
    squares.append(a ** 2)
    print(BrokenPipeError)
    cubes.append(b ** 3)
    return squares, cubes

print(culc(1))   #([1], [1])
print(culc(2, 3))  #([1, 4], [1, 27])
print(culc(3, 4))  #([1, 4, 9], [1, 27, 64])
```

【キーワード引数の順番】
引数名合っていれば順番は自由
```test13.py
def location(city, state, country='Japan'):
    print("I live in",country,".")
    print("My company is located in",city,",",state,".")
```

【コーディングルール】
・括弧類の後ろには空白は入れない
・国際的な環境で使用する予定のコードでは、PythonのデフォルトであるUTF-8か、さらにプレーンなASCIIが常に最良である。

【内包表記】
[式 for 任意の変数名 in range()など]
※for の後は変数名なので式では✕
〇cubes = [x ** 3 for x in range(5)]
✕cubes = [x for x ** 3 in range(5)]

【内包表記の書き換え】
```test14.py
matrix = [[2, 3, 5], [4, 9, 25], [8, 27, 125]]
power = [row[2] for row in matrix]
print(power)

↓
matrix = [[2, 3, 5], [4, 9, 25], [8, 27, 125]]
power =[]
for row in matrix:
    power.append(row[2])
print(power)
```

【スタックとキュー】
スタック：LIFO
キュー：FIFO

【ソート】
sortとsortedの違い
sort:メソッド、元のリストが書き換えられる、print(sort())はNone返す
sorted:新しくリストが生成される

```test15.py
org_list = [3, 1, 4, 5, 2]

new_list=org_list.sort()
new_list2=sorted(org_list)

print(new_list)  #None
print(org_list)  #[1, 2, 3, 4, 5]
print(new_list2)  #[1, 2, 3, 4, 5]
```

【シーケンスと他の型の比較】
後日記入


【モジュールのインタープリタ検索の順番】
ビルトインモジュール→sys.path変数で得られるディレクトリ
※シンボリックリンクを置いてあるディレクトリは含めない

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

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

[ コード ]
```test16.py
import sys
print(【A】)
Answer Provided: ✕sys.argv[0:2]

Correct Answer: sys.argv[1:4]

#sys.argv[0]:スクリプト名
#sys.argv[1]:"one"
#sys.argv[5]:"five"
```

【re 正規表現操作】
```test17.py
#次の正規表現を用いたコードの【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])

#Correct Answer: ret = prog.search('Kusaneiro')
#progの文字列で作成できないもの（存在しない文字）を使っているとエラー
```


【日付】
✕import date
〇from datetime import date


【loggingモジュールのメッセージ優先度】
CRITICAL>ERROR>WARNING>INFO>DEBUG


【その他】
・デフォルト設定ではユーザーディレクトリの「.python_history」ファイルにヒストリが保存される。ヒストリは対話型インタープリタセッションで利用できる