【Python】基本！PEP8を意識して書いてみた！

# 本日の内容
今日の記事はPythonを使用する上で基礎的な情報を記載していきます。
実際に勉強会でも使用する内容になります。
下記に記載しているコードはコードスタイル「PEP8」を意識して記載しています。
PEP8については以下のサイトをご覧ください。

https://peps.python.org/pep-0008/

## 変数と四則演算

Pythonでは、整数、文字列、リスト、関数など、すべての値はメモリ上のどこかに存在するオブジェクトです。
変数には、値がどこにあるのかを示す「オブジェクトID」（オブジェクトのアドレス）が代入されます。
コードは以下になります。
```python
# 変数
num = 1  # メモリ上に整数値1のint型オブジェクトが作られ、変数numにはオブジェクトIDが代入される
print(type(num))  # <class 'int'>

moji = "こんにちは"
print(type(moji))  # <class 'str'>

num_1 = 1.1
print(type(num_1))  # <class 'float'>

flg = True
print(type(flg))  # <class 'bool'>
num_lst = [1, 2, 3, 4, 5]
print(type(num_lst))  # <class 'list'>

num_tuple = (1, 2, 3, 4)
print(type(num_tuple))  # <class 'tuple'>

num_dict = {1: 'リンゴ', 2: 'バナナ'}
print(type(num_dict))  # <class 'dict'>

num_set = {1, 2, 3, 4, 5}
# print(type(num_set))  # <class 'set'>


# 四則演算
def operations():
    """
    四則演算
    """
    x = 4
    y = 2
    print(f'{x} + {y} = {x + y}')  # 和
    print(f'{x} - {y} = {x - y}')  # 差
    print(f'{x} × {y} = {x * y}')  # 積
    print(f'{x} ÷ {y} = {x / y}')  # 商
    print(f'{x} ÷ {y} = {x // y}')  # 商の切り捨て
    print(f'{x}の{y}乗 = {x ** y}')  # べき乗
    print(f'{x} の余り {y} = {x % y}')  # 余り


operations()

```
### 型説明
**list**：データを一直線にまとめたもの。インデックスでアクセスできる。

**tuple**：リストオブジェクトのように要素を変更することはできない。
複数の要素が決まった順番にならんだ値。

**dict(辞書)**：キー (key) と値 (value) を対応づけるデータ型。

**set(集合)**：リストと同様に複数の要素から構成されるデータです。 セットでは、リストと異なり要素の重複はしない。

### 実行結果
![Untitled (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/81cfa4eb-8ddf-0087-b9df-ca0962b54843.png)

## 制御構造
コードは以下になります。
```python
# 条件分岐
num = int(input('数字を入力-> '))  # ユーザから入力
if num == 10:
    print('10です。')
elif num >= 10:
    print('10以上です。')
else:
    print('10以下です。')

# ループ
for i in range(10):
    print(i)  # 0始まり

moji = [chr(ord("A")+i) for i in range(26)]  # アルファベットを格納
# enumerate-> forループでインデックスを取得できる
for j, k in enumerate(moji, 1):
    print(f'{j}:{k}', end= ' ')


# ループ、条件分岐、内包表記
def even_1(even):
    """偶数を返す関数

    Args:
        even(list[int]): 空のリスト

    Returns:
        list[int]: 偶数リスト
    """
    for i in range(1, 10 + 1):
        if i % 2 == 0:
            even.append(i)
    return even


even_lst = []
print(*even_1(even_lst))


def odd_1(odd):
    """奇数を作成する関数

    Args:
        odd (list): 空のリスト

    Returns:
        list[int]: 奇数のリスト
    """
    odd = [i for i in range(1, 10 + 1)if i % 2 != 0]
    return odd


odd_lst = []


print(*odd_1(odd_lst))

```

**docstring**： コード内で文字を記載する際の方法の一つ。関数の場合は、何をするのかの概要、パラメータ、戻り値、発生する例外などについて記述する。

**内包表記**：既存のリストから新しいリストを作ることができる、リスト作成方法の一つ。

**関数**：処理を一つにまとめたもの。
### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/49ec27a2-9b86-c6db-1da7-8d5cc63df2e2.png)

## データ構造（list）
コードは以下になります。
```python
import random


# データ構造
num_lst = [1, 2, 3, 4, 5]

n_lst = [random.randint(1, 100) for _ in range(15)]

# リストのインデックス
print(num_lst[0])  # 最初
print(num_lst[-1])  # 最後

print(num_lst[0:1])

print(num_lst[0:2])  # [1, 2]
num_lst_1 = num_lst[0:2]
print(type(num_lst_1))
print(num_lst[0:])  # [1, 2, 3, 4, 5]

print(f"ランダムなリスト -> {n_lst}")  # 半角区切りで出力
print(f"合計 -> {sum(n_lst)}")  # sum関数(合計)
print(f"要素数 -> {len(num_lst)}")  # len関数(要素数)
print(f"最大値 -> {max(n_lst)}")  # max関数(最大値)
print(f"最小値 -> {min(n_lst)}")  # min関数(最小値)
print(f"平均 -> {sum(n_lst) // len(n_lst)}")  # n_lstの平均

# まとめて変数にセット
a, b, c, d, e = num_lst
print(a, b, c, d, e)
```
### 実行結果
![Untitled (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/c5b83074-63e8-a0f0-d220-5a0ac1804423.png)

## データ構造（dict）
コードは以下になります。
```python
d = {'x': 10, 'y': 20}
print(d['x'])

d['z'] = 200
print(d)

# 辞書作成
d_1 = dict(a=10, b=20)
print(d_1)

print(d.keys())  # keyを確認
print(d.values())  # valueを確認

d2 = {'x': 10000, 'z': 900}
d.update(d2)  # アップデート
print(d)

x = {'a': 10, 'b': 20}  # 変数xにはオブジェクトID（オブジェクトのアドレス）が代入される
y = x  # 別変数への代入でもオブジェクトIDが代入され、オブジェクトを共有する
y['a'] = 1000
print(x)
print(y)

x = {'a': 10, 'b': 20}
y = x.copy()  # オブジェクトをシャローコピーして別オブジェクトを作ってから変数に代入する
y['a'] = 1000
print(x)
print(y)
fluits = {
    'apple': 100,
    'banana': 200,
    'orange': 300
}
print(fluits['apple'])

```
### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/4313f3b9-17a6-3071-4d0b-ad3beaaa5e49.png)


## データ構造（set）
コードは以下になります。
```python
# 集合
s = {1, 2, 3, 4, 5, 6, 7}
print(s)
a = {6, 7, 8}

print(s - a)  # sからaを抜いたもの
print(a & s)  # aかつb
print(a | s)  # aまたはb
print(a ^ s)  # 二つのもので重複していないものを出力

s.add(6)
s.add(6)  # 重複はしない
s.remove(6)  # 6を消せる
s.clear()  # 全部消す

my_friends = {'A', 'B', 'D'}
A_friends = {'B', 'C', 'D', 'F'}
print(my_friends & A_friends)  # 共通の友達

# 種類を確認する時などにも使用できる。
f = ['apple', 'banana', 'apple', 'banana']
kind = set(f)  # 重複を消す。
print(kind)

```
### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/f9f3eff5-3f58-a16b-d7c3-5f962140b95e.png)