Pythonはじめから勉強 Hour2：制御文

# Pythonはじめから勉強 Hour2：制御文

* Pythonで何かしようとしたときに、まずサンプルスクリプトを探してなんとなく実行してた私が、
* 自動実行でREST API叩いて、結果の確認、VM操作までやってみたいと思う7時間



## 学習資料

* たった 1日で基本が身に付く！ Python超入門 
  * https://a.r10.to/hbHMiv
* 過去の記事
    * [Pythonはじめから勉強 Hour1:Hello World](https://qiita.com/matsumo2019/items/5a69381f44456e6e6a5d)



## 環境

* Windows
* Python Ver3系



## プログラムファイル(.py)を作って実行

### テキストファイルで作って実行

* 日本語も扱えるけどUTF-8で書くこと。SJISとかエラーになります。

 * 今までやったスクリプトをテキストファイルで作成（test_01.py)

   ```python
   print(1)
   print('2')
   a = 1 + 2
   print(a)
   print('こんにちは パイソン-san')
   ```


 * 実行してみる

   ```
   C:\test_01.py
   1
   2
   3
   こんにちは パイソン-san
   
   C:\
   ```



 * 宣言していない変数を使って、エラーを起こしてみる（test_03.py)

   ```python
   print(1)
   print('2')
   a = 1 + 2
   print(b)
   
   ```

 * 実行してみる

   ```
   C:\Users\>test_03.py
   1
   2
   Traceback (most recent call last):
     File "C:\Users\test_03.py", line 4, in <module>
       print(b)
   NameError: name 'b' is not defined
   ```

 * 途中まで実行されますがエラーになりますね

 * bが定義されてないよーって、そのままのエラーで分かりやすいですね。

   

### コメント行・コメント範囲

* #でコメント
* ''' ~ ''' で複数行コメント。シングルクォート3つ。



## 条件分岐

 * if 文はこんな感じ。簡単だけど今までコピペしかしたことなかったから覚えてなかったけど一度書くと忘れない。

   ```
   if 条件式:
   	条件式を満たす場合の処理
   elif 条件式:
   	2つ目の条件式を満たす場合の処理
   else:
   	それ以外の処理
   ```

 * 例文

   ```python
   a=17
   
   if a % 2 == 0:
   	print('2')
   elif a % 3 == 0:
   	print('3')
   elif a % 5 == 0:
   	print('5')
   else:
   	print('nothing')
   ```



## リスト

* この後、ループ処理が出てくるけど、ループ処理とリストは密接な関係があるからここで説明

* リストはこんなの。3つの要素を持つリスト

  * [ 'taro', 'jiro', 'kotaro']

* リストの使い方

  * リストを変数に代入 / リストを表示する / リストの1つのデータを取り出す
  * リストの値を入替（上書き） / リストの長さを取得(len関数） / リスト外の取得（エラーとなる）

 * 例文

   ```python
   a = ['taro', 'jiro', 'kotaro', 10]
   print(a)
   
   print(a[0])
   
   a[0]='hogeo'
   print(a)
   
   print(len(a))
   
   print(a[4])
   
   ```

 * 実行してみる

   ```
   C:>test05_list.py
   ['taro', 'jiro', 'kotaro', 10]         ← リストを表示
   taro								← 1つめを常時
   ['hogeo', 'jiro', 'kotaro', 10]		　 ← 入れ替えて表示
   4									← リストの長さを取得
   Traceback (most recent call last):
     File "C:\test05_list.py", line 11, in <module>
       print(a[4])
   IndexError: list index out of range		← リスト外の値を取得したのでエラーになる
   ```



## ループ処理

 * for loopですね。サンプル見た方が早い

   ```python
   name_list = ['taro', 'jiro', 'kotaro', 'hogeo']
   
   for name in name_list:
   	print(name)
   ```

 * 実行してみる

   ```
   >test06_for_loop.py
   taro
   jiro
   kotaro
   hogeo
   ```

* len()でリストの長さを取るのかと思ったら取らないのね。

* リストの0番目から最後までをname変数に入れてから出力する

  

## break & continue

* 処理の途中で抜けたいとき

* breakの例。リストに偶数が含まれているか否かを判断するプログラム

  ```python
  nubber_list = [1, 3, 11, 15, 7, 9]
  has_even = False
  
  for i in number_list:
  	print(i)
  	if i % 2 == 0
  		has_even ~ True 
  		break
  print ('has_even=' has_even)
  ```

 * 実行してみる

   ```
   >test07_break.py
   1
   3
   11
   15
   7
   10
   has_even=True
   
   ```



## while文：

* 何回ループ回せばいいか分からない時に使う

* リストに偶数が含まれているか否かを判断するプログラム

  ```python
  number_list = [1, 3, 11, 15, 7, 9]
  length =len(number_list)
  i = 0
  
  while i < length:
  	print('List No.' + str(i) + '=' + str(number_list[i]))
  	i += 1
  
  ```

 * 実行してみる

   ```
   >test08_while.py
   List No.0=1
   List No.1=3
   List No.2=11
   List No.3=15
   List No.4=7
   List No.5=9
   ```





## 今回のまとめ

* .pyで実行ファイルを作れる
* Pythonは日本語出力もできるがUTF-8で書かないとだめ。
* リストはjsonとか扱う時とかあちこちで使うよ
* if / for / while などの構文は必須 



## 名言・ライトニングトーク用

* 今回はメモしながらだと2時間ぐらいかかった。
* テキストを転記するのではなく考えながらやると、身に付く。
* こんなレベルでも時間がかかる....