C言語を勉強した工大生のPython勉強ノート

#まえがき

C言語（ポインタ、配列除く）を勉強した工大生のPython勉強ノートです。
書籍を使ってPythonを勉強しています。

C言語と似ているところは、簡潔に記述、又はすっ飛ばしています。
つまづいたところは私なりの補足を入れている場合があります。


###環境
OS：Windows 10 Pro
PYthonのインストール：[Anaconda](https://www.anaconda.com/distribution/)
Python バージョン：3.7.4
テキストエディタ：[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
書籍：[辻 真吾 - Pythonスタートブック [増補改訂版]   - amazon](https://www.amazon.co.jp/Python%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-%E8%BE%BB-%E7%9C%9F%E5%90%BE/dp/4774196436/)

###辻先生の書籍について

イメージをつかみやすい図やソースコードが多く載っています。
コードを実行しながら学ぶことができます。

この記事を読んで「もっとPythonの理解を深めたい！」と思った方は、
ご購入をお勧めします。
よりわかりやすく、理解が深まることでしょう。

#1. Pythonのインストールと作業ディレクトリの作成

Anacondaを使用する。
仮想環境の管理が同時に行えるのが便利だと思う。

作業ディレクトリを適当に作成する。

#2. Pythonファイルの拡張子

Pythonのスクリプトファイルの拡張子は「～.py」にするのが一般的。

#3.算術計算 と 表示 (print('xxx') )

算術記号はC言語と変わんないなーというイメージ。
（詳しくは検索してね。）

**printf("xxx") ➡ print('xxx') 又は print("xxx")**
C言語で何故か必要だった「f」は不要。

#4. 型
データの違いを特に、データの**型（かた）**と呼ぶ。
**型**はデータの種類を表す。

型の例：整数型、小数型、文字列型

上記の例は非常によく使うデータ型である。
➡**組み込みデータ型**という。

|整数  |文字列|小数  |  真偽| リスト|
|:----:|:----:|:----:|:----:|:----:|
|数字そのまま（小数点無）|'または"で囲む|小数点付きの数字|正誤|カンマ区切りに並べたデータを[]で囲む
|-2 2 3|'abc' '日本' '2019'|1.5 0.001 | True  False | ['Japan','German'][1,2,3]|

#5. 変数名のつけ方

変数に使用できる文字の種類：アルファベット、数字、 _(アンダースコア)
大文字と小文字は区別される。

###使えない単語
is, not, if, for などの単語は、そのまま変数名に使うことはできない。
変数名の一部に使用することはできる。

#6. 関数とは何か

たとえば、ペンの長さを測りたいときは定規を使うと思う。
このように、やりたいと思った作業が簡単に達成できる道具があると便利！

Pythonにおける便利な道具の1つが**関数（かんすう）**

#7. メソッド

**メソッド**とは、データ型がそれぞれ持っている**専用の関数**のこと。

例として**split関数(文字列型専用の関数。自分自身を特定の文字で区切る)**を使ってみる。

「ab,cde」という文字型データの変数をおく。

```python

>>> letters = 'ab,cde'
```
.
split関数を使う。

```python
>>> letters.split(',')
['ab', 'cde']
```

bとcの間の「,」で区切ることができた。

#8. モジュール

モジュールとは、**機能のまとまりの単位**である。
様々な関数が機能ごとにまどめられている。

モジュールを使うためには、使用するモジュールをPythonに指示する（読み込む）必要がある。
➡import という命令を使う。

```python
import モジュール名
```
と記述してモジュールを読み込む。
記述位置はコードの先頭にするのが一般的である。

例として、datetimeモジュールを使ってみる。

```python
>>> import datetime
>>> kyou = datetime.date.today()
>>> print(kyou)
2019-10-04
```

##作成と更新

```python
>>> import モジュール名
>>> モジュール名.関数名(引数)
```
.
モジュールファイルをテキストエディタで編集した場合は、
モジュールを読み込みなおす必要がある。
**➡importlibモジュール**を使用する（Python3.4以降）

```python
>>> import importlib
>>> importlib.reload(モジュール名)
```



#9. データの入れ物

1. リスト型
2. 辞書型
3. タプル
4. セット

データを追加、変更、削除、並べ替え、足し算などができる。

##9.1 リスト型

###9.1.1 リスト型データの作成
「,（カンマ）」で区切ったデータを「[　]」でくくる。

```python
>>> list_mix = [0,1.5,'test']
```

小数型や文字列型を混ぜて、リストにすることができる。

###9.1.2 データへのアクセス

[]で番号を指定することでアクセスする要素を指定することができる。

```python
>>> list_mix = [0,1.5,'test']
>>> list_mix[1]
1.5
```
.
後ろから数えて要素を取り出すこともできる。
その場合は-1以下の数字で表す。

```python
>>> list_mix[-3]    #最後から3番目の要素
0
```

###9.1.3 要素の変更
変更したい要素を添え字で指定して変更する。

```python
>>> list_mix[1] = -1
>>> list_mix
[0,-1,'test']
```

###9.1.4 要素の追加

####appendメソッド

```python
>>> list_mix
[0,-1,'test']
>>>
>>> list_mix.append(4)
>>> list_mix
[0,-1,'test',4]
```
リストの最後尾に4が追加された。

####insertメソッド
挿入場所を指定して要素を追加する場合。
 - 引数1つ目：要素を追加する場所
 - 引数2つ目：追加する要素

```python
>>> list_mix
[0,-1,'test',4]
>>>
>>> list_mix.insert(2,1)
>>> list_mix
[0,-1,1,4]
```
挿入した場所にもとからあった要素は、１つずつ後ろにずれる。

###9.1.5 要素の削除
2つの方法がある。

1. 添え字を使う（pop）
2. 要素を直接指定する（remove）

####popメソッド
popメソッドの引数で消したい要素を添え字で指定する。

```python
>>> list_mix
[0,-1,1,4]
>>>
>>> list_mix.pop(1)
-1    #削除した要素が戻り値として返ってくる
>>> list_mix
[0,1,4]
```

####removeメソッド
removeメソッドの引数に、削除したい要素を指定する。

```python
>>> list_mix
[0,1,4]
>>>
>>> list_mix.remove(4)
>>> list_mix
[0,1]
```
popメソッドとは違い、戻り値は返ってこない。

###9.1.6 リストの結合と拡張

####「+」を使った足し算

```python
>>> list_a = [0, 1, 2]
>>> list_b = [3, 4, 5]
>>>
>>> list_a + list_b
[ 0, 1, 2, 3, 4, 5]
```

####リストの拡張

extendメソッド
list_aにlist_bの要素をすべて追加する

```python
>>> list_a = [0, 1, 2]
>>> list_b = [3, 4, 5]
>>>
>>> list_a.extend(list_b)
>>> list_a
[ 0, 1, 2, 3, 4, 5]
```

###9.1.7 スライス
リストの一部の要素だけを取り出すことができる。

～割愛～

###9.1.8 要素の並び替え(sort, reverse)
sortメソッドを使うと昇順にデータを並び替えることができる。

```python
>>> list_test = [4, 5, 2, 1, 3, 6]
>>> list_test
[4, 5, 2, 1, 3, 6]
>>> list_test.sort()
>>> list_test
[1, 2, 3, 4, 5, 6]
>>>
>>> list_test.reverse()
>>>list_test
[6, 5, 4, 3, 2, 1]
>>>
>>> list_test.reverse() #もう一度reverseメソッドを使うと
>>> list_test           #逆順になり、再び昇順になる
[1, 2, 3, 4, 5, 6]    
```

文字列にも使用することができる。

##9.2 辞書型

各データに名前を付けて保存するイメージ。
この時の名前が**キー(key)**、データを**値(value)**と呼ぶ。

キーを使って値を呼び出すことができる。

文字列にも使用することができる。

**使い方**

```
変数名 = {キー:'値', キー:'値', キー:'値'}
```

##9.3 タプルとセット

割愛


#10. for文
Pythonのfor文はとても短い。

```python
>>> list_test = [1, 2, 3, 4, 5, 6]
>>> for val in list_test :
... [ tab ] print(val)
1
2
3
4
5
6
```
これだけ。

**valなんかきもい！！！！！
valってなにさ！？何の値が入ってるの！？どうなってるの！？**

*Pythonは「なんて楽なんだー！」（C言語比）と思っていた私が初めてモヤモヤした箇所。
C言語みたいに細かく回数指定しなくていいの！？
逆になんかそれがわからんわ！！！*


正確性は置いといて、**飲み込むことができた解釈**を以下に記す。

**for文は裏でイテレーションしている！**

イテレーションについては以下のページを参照。
[参考ページ : Mastering Python - イテレーターってなに？](https://python.ms/type/for/iterator/#_1-%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%82%92%E8%A7%A6%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82)

この**next(list)を自動で繰り返してくれる**のがfor文、という風に飲み込むことにしました。

もしくは、**valの部分をitemという関数にしてみる**とイメージが湧くかも。

やってることはわからないけど、
こういうのってイメージつかむことが結構大事かなと思うので。

```python
>>> for item in list_test :
... [ tab ] print(item)
```

#11. if文 (if~elif~else)

C言語の else if が、
Pythonでは elif となっている。

```python
>>> if 条件 :
... [tab] 処理
... elif 条件 :
... [tab] 処理
... elif 条件 :
... [tab] 処理
... else:
... [tab]処理
...
```

#12. While文
条件が成立している間は処理を繰り返す

```python
>>> while 条件:
... [tab] 処理
...
```

##continueとbreak
if文の条件が成立しなくなるまで処理が続く


```python
>>> while 条件:
... [tab] 処理
... [tab] if 条件:
... [tab] [tab] continue
... [tab] else:
... [tab] [tab] break
...
```

#13. 例外処理 (try~except)
エラーが発生しそうなコードをブロックとしてまとめる。
（この場合、処理1と処理2）

それを try: と except: で囲む。


```python
try:
[tab] 処理1
[tab] 処理2
except:
[tab] 処理3

処理4
```

例外が発生しない場合は、処理3は実行されない。

try: の中の処理で例外（エラー）が発生すると、
except処理に飛ぶ。

処理4は、exceptにぶら下がっているわけではないので、
例外の有無にかかわらず実行される。

#14. ファイルの読み書き

組み込み関数openの戻り値はfile型である。

##書き込み
任意のファイルに文字列を書き込む場合のコードを以下に示す。

```python
>>> test_file = open('test.txt','w')  #書き込みモード（'w'）でファイルに接続
>>> test_file.write('Hello')
>>> test_file.close                   #ファイルとPythonの接続を切る（flushも行われる）
``` 

作業ディレクトリに指定したファイル名(test.txt)のファイルが・・
　1. 存在しない場合
　　　➡空のディレクトリが作成される。
　2. 存在する場合
　　　➡**上書き**される　*※注意！*

###制御文字
改行記号 /n
タブ記号 /t

##読み込み

```python
>>> test_file = open('test.txt','r')  #読み込みモード（'r'）でファイルに接続
>>> read_str = test_file.readline()   #内容の読み込み
>>> test_file.close                   #ファイルとPythonの接続を切る（flushも行われる）
```

まとめて複数行読み込みたい場合は
read_str = test_file.readline **s** ()

とする。
（スペースは空けずに）

##余計な文字を取り除く

**stripメソッド**
余計な文字や空白やタブなどの制御文字を取り除く。

```python
>>> '制御文字を取り除きたい文字列'.strip()
```


#15. joinメソッド

割愛

#16. with文でのファイルの処理

割愛

#17. 関数の作成
defを使って関数を定義する。
「:コロン」をお忘れなく。

```python
>>> def 関数名():
... [tab] 処理
```

#あとがき（2019.10.8）

割愛部分はそのうち加筆したいなと思っているところ。
（永遠に加筆しないかもしれない）

「ソースコードをそのまま載せるのは、著作権的にどうなのかなー」
「ソースコード無しでどうやって表現しようかなー」
とか悩んだ結果、とりあえず書かなかったところ。

項目名見て気になったものは、ググればいっぱい参考サイト出るだろう（丸投げ）


C言語を学んだ後、Pythonを学ぶ人の役に、少しでも立てたら嬉しいです。

気を付けているつもりですが、間違い等ご容赦ください。また、ご指摘いただけると幸いです。