[python] python初心者が覚えるべき事１１選

# 参考目次:airplane:
#### 目次一覧
[はじめに](#はじめに)
[自己紹介](#自己紹介)
[python基礎](#python基礎)
　- [3-1-変数とデータ型](#3-1-変数とデータ型)
　- [3-2演算子](#3-2演算子)
　- [3-3制御フロー](#3-3制御フロー)
　- [3-4関数](#3-4関数)
　- [3-5モジュール](#3-5モジュール)
　- [3-6例外処理](#3-6例外処理)
[ココでお茶休憩tea](#ココでお茶休憩tea)
　- [3-7オブジェクト指向プログラミングoop](#3-7オブジェクト指向プログラミングoop)
　- [3-8-ファイル操作](#3-8-ファイル操作)
　- [3-9リスト内包表記](#3-9リスト内包表記)
　- [3-10デコレーター](#3-10デコレーター)
　- [3-11ジェネレーター](#3-11ジェネレーター)
[その他](#その他)
[おわりに](#おわりに)

## はじめに
　この記事は*Python*を勉強しようと思っている人向けの記事となっております。
　結構寒くなってきましたね！もう冬ってことで私はショゲショゲです。

## 自己紹介
　どうも、みなさま！ぬぇです！現在はIT系の専門学校に通っている２年生です。
  学校ではPythonをメインにJavaやJavaScript,Network,IoT,DB、またWEB開発、情報処理について勉強をしています。プログラミングを始めて２年目となり、**ハッカソン**や**アイディアソン**、**開発**などの経験もしてきました。初めてなので拙い記事だと思いますが、どうか温かい目で見てください。
  
## Python基礎
### 3-1. 変数とデータ型
* 変数：データを格納するための**箱**のようなモノ。  
 ```python:variable.py
  int1 = 1
  str1 = "Hello,world"
  float1 = 3.14
 ```
 * データ型：データの種類を表す。
    * 整数型 (int): 整数値 (例: 10, -5, 0)
    * 浮動小数点型 (float): 小数を含む数値 (例: 3.14, -2.5, 0.0)
    * 文字列型 (str): 文字列 ("こんにちは", 'Python', "123")
    * ブール型 (bool): 真理値 (True または False)
    * リスト型 (list): 複数の値を順番に格納 [1, 2, 3], ["apple", "banana"]
    * タプル型 (tuple): 複数の値を順番に格納 (1, 2, 3), ("apple", "banana") リストと似ているが、変更不可。
    * 辞書型 (dict): キーと値のペアでデータを格納 {"name": "太郎", "age": 20}
    * 集合型 (set): 重複のない値を格納 {1, 2, 3}, {"apple", "banana"}
::: note warn
基礎中の基礎になるので、データ型は覚えましょう。
:::

### 3-2.演算子
* 様々な演算子
    * 算術演算子：+ ,- ,* ,/ ,// （切り捨て除算）,%（剰余）,**（べき乗）
    * 比較演算子：==（等しい）,!=（等しくない）,>（大きい）,<（小さい）,>=（以上）,<=（以下）
    * 論理演算子：and（かつ）,or（または）,not（否定）
    * 代入演算子：=,+=,-=,*=,/=

### 3-3.制御フロー
* if文：条件によって処理を分岐
```python:if.py
score = 68
if score >= 80:
    print("Great!") #もし８０点以上ならGreatと出力する。
elif score >= 60:
    print("Retake") #もし６０点以上ならRetakeと出力する。
else:
    print("Fail") #それ以外はFailと出力する。
```
```python:実行結果
 Retake
```

* for文：繰り返し処理
```python:for.py
for i in range(5): #０から４まで繰り返す
    print(i)
```
```python:実行結果
 0
 1
 2
 3
 4
```

:::note warn
指定がない場合は初期値は０から始まります。
:::

* while文：条件が真(True)の間、繰り返し処理
```python:while.py
count = 0
while count < 5: #Falseになるまで繰り返し
    print(count)
    count += 1 # 一度繰り返したら、countに＋１される。
```

### 3-4.関数
* 組み込み関数：Pythonにあらかじめ用意されている関数（print(),len(),type()など）
    * print関数：画面に**出力**する関数
    * len関数：オブジェクトの**サイズ**を取得する関数
    * type関数：オブジェクトの**データ型**を取得する関数
    * input関数：ユーザーからの**入力を受ける**関数

* 独自関数：自分で定義する関数

```python:function.py
def greet(name): #関数は「def 関数名（引数）」で作成される。
    print("Hello," + name + "!!")

greet("Nue") #引数（name）に"Nue"が入り、関数内にある処理（print)がされる。
```
```python:実行結果
Hello,Nue!!
```

### 3-5.モジュール
* モジュール：Pythonのプログラムをまとめたファイルのこと。
* import文：モジュールを読み込む。

#### [標準ライブラリ一覧（Python公式資料）](https://docs.python.org/ja/3/library/ "タイトル")

```python:module.py
import math # 数学的計算するためのライブラリ
print(math.pi) 
```

```python:実行結果
3.141592...
```

### 3-6.例外処理
* try-except文：エラーが発生した場合の処理。

```python:try.py
try: #処理する文をtryに記述
    x = int(input("数字を入力してください: "))
    print(10 / x)
except ValueError: #数字ではなかった場合
    print("数字を入力してください。")
except ZeroDivisionError: #０除算の場合
    print("0で割ることはできません。")
```

### ココでお茶休憩:tea:
　**python**って**java**より書きやすいんですよ。（めんどくさがりな私個人の感想）
　私は高校生の頃、好きでJavaの独学をしていましたが、Pythonの勉強を専門学校でしてから本当に「あぁ、Javaって書きにくいんだな…」と感じたんです。
 　先ほど紹介した**try-except文**をjava（**try-catch-finally文**になります。）で書くと…
```java:try.java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try {
            System.out.print("数字を入力してください: ");
            int x = scanner.nextInt();
            System.out.println(10 / x);
        } catch (ValueError e) {
            System.out.println("数字を入力してください。"); // 数字ではなかった場合
        } catch (ArithmeticException e) {
            System.out.println("0で割ることはできません。"); // 0除算の場合
        } finally {
            scanner.close();
        }
    }
}
```
　長いなぁ（　＾ω＾）・・・　
　そんな感じで、Pythonが大好きになったんです。是非みなさんが好きな（or 気になる）プログラミング言語をぜひコメントしてください！
　お茶休憩はココまで。

 ### 3-7.オブジェクト指向プログラミング（OOP）
　Pythonはオブジェクト指向プログラミング (OOP) をサポートしています。OOPでは、データと処理をまとめた「**オブジェクト**」を単位としてプログラムを構築します。
 
::: note
 補足説明：オブジェクト指向プログラミング (OOP) とは、データと関連するメソッドをクラスという単位でまとめ、オブジェクト間の**相互作用**を管理する開発手法のことです。
:::
* クラス: オブジェクトの**設計図**となるもの。
* インスタンス: **クラスを基に作られた**具体的なオブジェクト。
* メソッド: クラス内で定義された**関数**。
* 属性: クラス内で定義された**変数**。

```python:class.py
class Dog:  # クラスの定義
    def __init__(self, name, breed):  # コンストラクタ
        self.name = name  # 属性
        self.breed = breed

    def bark(self):  # メソッド
        print("ワン！")

my_dog = Dog("ポチ", "柴犬")  # インスタンスの作成
print(my_dog.name)  # "ポチ"
my_dog.bark()  # "ワン！"
```

```python:実行結果
ポチ
ワン！
```

### 3-8. ファイル操作
　Pythonはファイルの読み書きを行うことができます。

* open(): ファイルを開く関数。
* read(): ファイルの内容を読み込むメソッド。
* write(): ファイルに書き込むメソッド。
* close(): ファイルを閉じるメソッド。

```python:file.py
# ファイルの読み込み
with open("sample.txt", "r") as f:
    data = f.read()
    print(data)

# ファイルへの書き込み
with open("sample.txt", "w") as f:
    f.write("Hello, world!\n")
```

:::note warn
上記では「with open…」と使っていますが、withを使わない場合だとclose()を必ず記述しなければいけません。
:::

### 3-9.リスト内包表記

　**リスト内包表記**を使うと、簡潔にリストを作成することができます。

:::note
　補足説明：リスト内包表記とは、既存のリストから新たなリストを作成するために用いられるもの。通常のループや条件分岐を1行で記述できるので、コードが読みやすく、効率的になります。
:::

```python:list.py
# 0から9までの偶数のリストを作成
even_numbers = [i for i in range(10) if i % 2 == 0]
print(even_numbers)
```

```python:実行結果
[0,2,4,6,8]
```

### 3-10.デコレーター
　Pythonの関数やメソッドに対して追加の機能を**動的**に付加するためのパターンです。関数を修飾するための関数として、元の関数の挙動を**変更**したり、**拡張**したりすることができます。

```python:deco.py
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("関数が呼ばれました")
        result = func(*args, **kwargs)
        print("関数が終了しました")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print("こんにちは、" + name + "さん！")

say_hello("Nue")
# 出力:
# 関数が呼ばれました
# こんにちは、Nueさん！
# 関数が終了しました
```

### 3-11.ジェネレーター
　Pythonの特別な種類のイテレーターで、データを**逐次的**に生成することができるものです。ジェネレーターを使うと、通常のリストやタプルのように**すべてのデータを一度にメモリに格納すること**なく、**必要な時にそのデータを生成**して返すことができます。この特性を活かして、大きなデータセットを扱う際の**メモリ効率を向上させること**ができます。

 ```python:generator.py
def my_generator(n):
    for i in range(n):
        yield i * 2

for x in my_generator(5):
    print(x)
 ```

```python:実行結果
出力:
0
2
4
6
8
```

## その他
　Pythonでは、プログラミング中に書くコメントを「# (半角スペース)値」という感じで記述できます。
　プログラミング中にコメントを入れるのは、自分や他の開発者がコードを見たときに**可読性**が向上するからです。自分へのメモ書きとしても使用できます。コードを書いた本人以外がそのコードを変更や改善する際、コメントがあればスムーズに作業が進めることができ、**バグ修正**、**制約事項の説明**、**テスト項目**、**ドキュメンテーション**の役割も果たします。
 　ぜひこれからプログラミングに挑戦する方は、コメントを残す癖をつけましょう！！

　またPythonではインデントが重要です。インデントとは、コードの**行の先頭に空白やタブ**を挿入して、コードを**階層的**に整理する手法です。インデントは主に、コードブロック（例えば、条件分岐やループなど）を**視覚的に区別するため**に使われます。また、プログラミング言語によってはインデントが構文の一部として重要であり、**正しくないインデント**がエラーを引き起こすこともあります。

 ## おわりに
 　最後まで見ていただきありがとうございました！この記事が約に立つことができたら、私はとても嬉しいです。これから私自身が独学で機械学習や自然言語処理、データ分析などPythonにまつわる事を執筆していく予定です。ぜひそちらも参考にしてください！
　よかったらフォロー、イイネのほうお願いいたします！

 ![ぬぇ_Nue (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519822/b0786451-e60c-2d1a-8d2f-cea1f2ee78f8.png)