Python 基本文法おさらい

Pythonで開発しようとしていたらだいぶ文法を忘れていたので復習。

##print()
python3では()が必須, ()がないとSyntaxErrorになる。

```python
print('hoge')
=> hoge
```

- 改行しない書き方

print関数はデフォルトは改行するようになっている

```python
first_name = 'Bryan'
last_name = 'Cranston'

print(first_name)
print(last_name)
=> Bryan
Cranston
```

改行しないようにするにはendオプションに空文字を指定

```python
print(first_name, end='')
print(last_name)
=> Bryan Cranston
```

print関数は引数に文字列を複数入れられるが、間に半角スペースが入ってしまう

```python
state = 'ニューメキシコ州'
city = アルバカーキ

print (state, city)
=> ニューメキシコ州 アルバカーキ # 半角スペースが入る
```

半角スペースを入れたくない時もendオプションに空文字を指定

```python
print(state, end='')
print(city)
=> ニューメキシコ州アルバカーキ
```


## 文字列の連結
=> f文字列を使う

上の例では、文字列を連結すれば済む話なので、連結の方法を書きます

```python
print(f'{state}{city}')
=> ニューメキシコ州アルバカーキ
```

ダブルクォーテーションでも三連クォーテーションでも書けます

```python
print(f"{state}{city}")
print(f'''{state}{city}''')
print(f"""{state}{city}""")
=> ニューメキシコ州アルバカーキ
```

## 三連クォーテーション
=> 複数行の文字列を定義するときに使用

```python
text = '''
余命わずかの高校教師が家族のために挑む危険な副業。
それは麻薬の精製だった…。
サスペンス・ブラックユーモア・家族愛が奇跡の科学反応を起こしたドラマ。
'''

print(text)
=> 
余命わずかの高校教師が家族のために挑む危険な副業。
それは麻薬の精製だった…。
サスペンス・ブラックユーモア・家族愛が奇跡の科学反応を起こしたドラマ。
```

最初の'''の直後から文字列なので最初に改行が入ってしまっている
最初に改行をしたくないときは `\` マークを入れる

```python
text = '''\
余命わずかの高校教師が家族のために挑む危険な副業。
それは麻薬の精製だった…。
サスペンス・ブラックユーモア・家族愛が奇跡の科学反応を起こしたドラマ。
'''

print(text)
=> 余命わずかの高校教師が家族のために挑む危険な副業。
それは麻薬の精製だった…。
サスペンス・ブラックユーモア・家族愛が奇跡の科学反応を起こしたドラマ。
```

## タプル型

タプル型とは変更不可の配列のこと
タプルの方が配列より実行速度が速い

```python
# 書式
hoge = (1, 2, 3, 4, 5)

# タプルは()を省略できる
hoge = 1, 2, 3, 4, 5
```

## ミュータブルとイミュータブル

変更可能な型をミュータブル
変更不可な型をイミュータブル

配列はミュータブル（変更可）、文字列や整数はイミュータブル（変更不可）

```python
# 配列はミュータブル
arr = [1, 2, 3, 4, 5]
arr[2] = 4
print(arr)
#=> [1, 2, 4, 4, 5]

# タプルはイミュータブル
tuple = (1, 2, 3, 4, 5)
tuple[2] = 4
#=> TypeError

# 配列をタプルにする
tuple(arr)

# タプルを配列にする
list(tuple)

# タプルで値が１つしかないものを作るときはカンマを書く
# NG
tuple = ('hoge')
print(type(tuple))
#=> <class 'str'>

# OK
tuple = ('hoge', )
print(type(tuple))
#=> <class 'tuple'>
```

## モジュールを使う

```python
# インポート
# import モジュール名
import calendar

# クラスを読み込む
# from モジュール名 import クラス名1, クラス名2...
from calendar import TextCalendar

# モジュールのクラスからインスタンス生成
# モジュール名.クラス名（引数)
calendar = calendar.TextCalendar(firstweekday=6)
```

## in演算子
=> 要素があるか調べる

```python
drama = 'prison break'
movie = 'dark night'

dramas = ['24', 'prison break', 'lost', 'breaking bad']

drama in dramas
#=> True

movie in dramas
#=> False

# not in で要素がないか調べる
drama not in dramas
#=> False

movie not in dramas
#=> True
```

## 三項演算子（Pythonでは条件式という名前）

```python
# 書式
# 変数 = 真の場合 if 条件 else 偽の場合

age = 19
msg = 'お酒NG' if age < 20 else 'お酒OK' 
print(msg)
#=> お酒NG
```

## for文

```python
# 書式

# for 変数 in イテレート可能なオブジェクト:
#   処理

artists = ['ダヴィンチ', 'ミケランジェロ', 'ルーベンス']
for artist in artists:
  print(artist)

#=> ダヴィンチ
ミケランジェロ
ルーベンス

# range()を使って指定回数繰り返す

for i in range(3):
  print(i)

#=> 0
1
2

# for文１行目「:(コロン)」をとにかく忘れやすい
# Pythonではインデントをそろえた部分がブロックとなっている
```

## if文

```python
# 書式
# if 条件式1:
#   処理1
# elif 条件式2:
#   処理2
# else:
#   処理3
```

elif...**elif**...$\mathbb{elif}$

## クラス定義

```python
# class クラス名:
#   def メソッド名(引数):

class DragonQuestYourStory:
  def throw_poop(mental):
    mental * 0.8
```

コロン地獄

## while

```python
# 書式
# while 条件式:
#   処理
#   処理

# 無限ループ
# while (True):
#   処理
#   処理

# IoTだと無限ループ使うと思いますが、どこかでbreakを入れる

num = 0
while True:
  if num > 10:
    print('試行回数10回を超えました')
    break
  num += 1
```

とりあえず今回はここまで。本当にコロン忘れがち。