Python 3 エンジニア認定基礎試験の「準備→合格」編

　2月に、Python 3 エンジニア認定基礎試験を受けましたが、不合格という残念な結果になりました。失敗原因を分析して、Pythonの基礎知識への理解が不十分です。模擬試験で100点を取りましたが、実際の試験の難易度は模擬試験より難しいです。そのため、Python 3 エンジニア認定基礎試験のホームページにておすすめられたテキストを買って、ちゃんと理解していきます。このテキストの内容はネットで読めますが、文章の構造はあまり理解しにくいだと思います。そのため、本を読みながら、私にとって分かりやすい形でまとめます。4月、もう一度試験を受けてみます。絶対受かるように頑張ります。


# 第１章 食欲をそそってみようか　
2020年3月23日（月）

この章では、Pythonの特徴(メリット）をご紹介してくれます。
1. PythonはC/C++/Javaより早い（速くはない）。
   C/C++/Javaは通常のコーディング/コンパイル/テスト/再コンパイル、というサイクルが遅すぎると感じているかもしれません。Pythonはインタープリタ言語であり、コンパイルもリンクも必要ではないため、プログラム開発における時間をかなり節約してくれる。
2. PythonはWindowsでもMacOSXでもUNIXでも簡単に使え、仕事が早く終わるようになる。
3. Pythonは大きなプログラムを書くために提供された構造やサポートがはるかに多い。
   エラーチェック機構ははるかに多い、また、超高水準言語として、柔軟な配列や集合、ディクショナリといった、非常に高水準のデータ型を組み込みで持つ。
4. Pythonで書いたプログラムは、分離されたモジュールとして再利用が可能だ。
5. Pythonはプログラムを小さく読みやすくかける。
   理由：
   ①高水準のデータ型が、複雑な操作を単一分で表記することを可能にしている
   ②文のグルーピングは、カッコで囲うことではなくインデントで行われる
   ③変数や引数の宣言が不要
6. Pythonは拡張可能である。
   Cで書いたアプリケーションにPythonインタープリンターをリンクで入れ込み、拡張言語や命令処理言語として使うことすら可能だ。


ーーー専門用語ーーーー
- テストスイート（test suite）
 テストスイートは、特定の一連の動作があることを示すためにソフトウェアプログラムをテストするためのテストケースの集合です。 
- 拡張言語：WWWサーバーからWWWクライアントに対してプログラムコードを送り、これをクライアント側で実行できるようにした言語処理系。
- インデント：字下げ。文書表示で、特定の範囲の行だけ文字の位置を変更できるワープロソフトの機能


# 第２章　Pythonインタープリンタの使い方
## 2.1 インタープリンタの起動
- UNIXの検索パスに /usr/local/bin（通常）を入れてあれば、シェルで　Python3.5と入力だけで起動できる。
- Windowマシンの場合に、DOSプロントで以下のコマンドを入力すれば、起動できる。
  ```
  set path=%path%;C:\python35
  ```
- EOF(End of File):
  方法①UNIXでは「Ctrl」+「D」キー、Windowsでは「Ctrl」+「Z」キー
  方法②quit()を入力

注：全てのコマンドラインオプションの解説は『Pythonのセットアップと利用』の『コマンドラインと環境』にある。

- 対話モード
  `>>>` (プライマリプロンプト)：コマンド入力を促すプロンプト
  `...` (セカンダプロンプト)：継続行　（複数行で理論構成する場合には、継続行が必要である。）

- PythonのソースファイルはUTF-8でエンコードしてあるものとして扱われる。
　他のエンコーデングを使うことも可能である。
  ```
  #-*-coding:エンコーディング名-*-
  ```

# 第３章　気楽な入門編
## 3.1 数値
<img width="573" alt="スクリーンショット 2020-03-24 9.55.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/d2566d98-3dec-3004-9bf1-b9026674afce.png">

また、Pythonでは整数と浮動少数点数だけでなく、十進数(Decimal)や有理数(Fraction)など、様々な数値型がサポートされている。複素数もサポートされておる。

## 3.2文字列
Pythonでは数値に加え、文字列を扱うこともできる。
引用符にはシングルクオート、ダブルクオートどちらも同じ結果になる。
バックスラッシュでクオート文字のエスケープできる。
<img width="811" alt="スクリーンショット 2020-03-25 10.09.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/bfb5860d-71d8-59dc-0460-bd9d7ad1e3d8.png">

- 複数行に渡り書く時に、二つの方法がある
  ①`\n`
  ②`'''`
  <img width="248" alt="スクリーンショット 2020-03-29 21.50.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/c94e0731-4fe7-03ec-0147-e5ae0677f387.png">

- `+`演算子で連結
  `*`演算子で繰り返す
  <img width="309" alt="スクリーンショット 2020-03-29 21.56.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/9c5c2302-e309-2414-7f43-6d4eb7d22ed3.png">

- Test()機能は長い文字を分割したい時に便利です。
  <img width="355" alt="スクリーンショット 2020-03-29 22.01.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/b16494f1-a56f-4429-fbe6-c09e4de09b42.png">

- [n]
  文字列はインデックス指定ができる。
  `-0`は`0`と同じことなので、負のインデックスは`-1`から始まる。
  <img width="187" alt="スクリーンショット 2020-03-29 22.05.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/90ba284c-4995-4cd7-03db-e2113b177e3b.png">

- スライシング（切取）
  <img width="407" alt="スクリーンショット 2020-03-29 22.09.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/70ad5e69-241c-9697-21c1-09e0ad1345f0.png">

  注：
  ①大きすぎるインデックスを指定するとエラーになる。
  ②スライシングでは範囲外のインデックスを指定しても、いい具合に処理してくれる。
  <img width="478" alt="スクリーンショット 2020-03-29 22.14.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/c40eabc5-ff44-f966-06c8-42c5a78296a6.png">

- Pythonの文字列は改変できないー変更不能体(Immutable)
- ビルトイン関数len()は文字列の長さを返す：


## 3-3 リスト(list) 
(角カッコの中にカンマ区切りの値「アイテム」）
- リストは変更可能体(mutable)です。
  <img width="605" alt="スクリーンショット 2020-03-29 22.32.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/fce5712d-2256-68e8-ada1-69e1beeb9976.png">

- リストは入れ子にできる
  <img width="178" alt="スクリーンショット 2020-03-29 22.35.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/267c7301-e637-4332-86c8-dd020697f8b6.png">

# 第4章 制御構造ツール
## 4.1 if文
<img width="409" alt="スクリーンショット 2020-03-29 22.53.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/4d591232-62c1-532c-4410-d06fc3ed6d5c.png">

## 4.2 for文
<img width="236" alt="スクリーンショット 2020-03-29 22.51.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/21c590c0-835b-b9cd-cab3-73509d6f4223.png">

## 4.3 range()関数
数字のつながりに反復をかけるときは、ビルトイン関数のrange()が便利だ。これは等差級数を生成する。
```py
range(開始値,終了値,増分)
```
- シーケンスのインデックスで反復をかけたいときは、range()とlen()を組み合わせても良い

## 4.4 Break文とcontinue文、ループにおけるelse節
<img width="537" alt="スクリーンショット 2020-03-29 23.47.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606456/75203c84-f125-cb99-023d-f8de75b0d7bf.png">

## 4.5 Pass文
Pass文は何もしない。構文的に文が必要なのに、プログラム的に何もする必要がない時に使う。

## 4.6 関数の定義