プログラミングに少し慣れてきたところでPythonを学んでみた

#はじめに
今回[土日でわかるPythonプログラミング教室](https://www.amazon.co.jp/%EF%BD%9E%E7%9F%AD%E6%9C%9F%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7%EF%BD%9E-%E5%9C%9F%E6%97%A5%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99%E5%AE%A4-%E7%92%B0%E5%A2%83%E3%81%A5%E3%81%8F%E3%82%8A%E3%81%8B%E3%82%89Web%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E5%8B%95%E3%81%8F%E3%81%BE%E3%81%A7%E3%81%AE2%E6%97%A5%E9%96%93%E3%82%B3%E3%83%BC%E3%82%B9-%E5%90%89%E8%B0%B7-%E6%84%9B-ebook/dp/B075M5F7L9)でPythonを学んでみて、
その他のオブジェクト指向言語とは性質は変わらないもののPythonで書き方の違うメソッドをまとめてみました。
オブジェクト指向言語に関してはJSやReactを独学で二ヶ月ほど学びました。
この記事の対象としては少しプログラミングがわかる人と考えています。

#Fizzbuzz
オブジェクト指向言語を理解するには「FizzBizz」を試してみると良いと言われています。
FizzBizzとは下記の要件を満たすコードを描くものです。
・1-100まで出力
・３の倍数の時はFizz
・５の倍数の時はBuzz
・３と５の時はFizzBuzz

Pythonではこのようになりました。

```py
for num in range (1,101):
  if num % 3 == 0 and num % 5 == 0:
    print("FizzBuzz")
  elif num % 3 == 0:
    print("Fizz")
  elif num % 5 == 0:
    print("Buzz")
  else:
    print(num)     

```

#if文

```python
if (条件式):
  (実行するプログラム)
elif (条件式):
  (実行するプログラム)
else:
  (実行するプログラム)

```

#import
別のPythonプログラムファイルから、ライブラリやプログラムを読み込み、使えるようにすルものです。

使う時

```
プログラムファイル名.属性名
```

#ユーザー定義関数
戻り値がない場合の書き方

```
//関数の定義
def 関数名 (引数1, 引数2, ...)
  (実行するプログラム)

//関数の呼び出し
関数名 (関数に渡す値)
```

戻り値がある場合

```
//関数の定義
def smaple(s, t):
  return (s + t)
x = sample(1,2)
print(x)
```
＊関数が呼び出された際に、結果を呼び出した側に引き渡されるあたいのことを「戻り値」といいます。

#while文

```
while (条件文):
  (trueの間に実行されるプログラム)
else:
  (falseの際に実行されるプログラム)
```

#continue文
`while`や`for`と言った繰り返し処理の中で利用でき、
実行されると、それ以降の処理は行わず、繰り返し処理の先頭に戻ります

```python
for i in range(3):
  if i == 1:
    continue
  print(i)

#出力結果
0
2
```

#break文
繰り返し処理で`break`が実行されると、それ以降の処理は行わず繰り返し処理も終了します。

```python
for i in range(3):
  if i == 1:
    break
  print(i)

#出力結果
0
```

#オブジェクト指向の簡単な例

```python
class Nationality:

  # 1. __init__メソッド
  def __init__(self, homecountry):

    # 2.オブジェクト変数の定義
    self.country = homecountry
  def answer(self):
    print('I am from' ,self.contry)
1
# 3.オブジェクトの生成
Nationality1 = Nationality('Japan')
Nationality2 = Nationality('Mexico')

# 4. オブジェクトの呼び出し
Nationality1.answer()
Nationality2.answer()

#出力結果
# I am from Japan
# I am from Mexico
```
###1. __init__メソッド
オブジェクトが生成された際に必ず呼び出されるメソッドのことです。

```
def __init__ (self, 引数1, 引数2)
```

###2. オブジェクト変数の定義

```
self.オブジェクト変数名=オブジェクト変数の引数
```

###3.オブジェクトの生成

```
オブジェクトをセットする変数名=クラス名（引数）　
```

###4. オブジェクトの呼び出し

```
オブジェクト変数名.メソッド名（引数）
```

#ファイルの出入力方法
チャットボットでの受け答えのデータを保存するためのファイルへの出入力方法です。

```python

#1.ファイルを開く
file = open ('conversation.text', 'w')

#2.ファイルを読み込む
load = file.read()

#3.ファイルに書き込む
file.write('Hello world')

#4.ファイルを閉じる
file.close()
```

##1.ファイルを開く

```
変数名 = open('ファイルへのパス', 'モード') 
```
ファイルを開く際は、モードという開き方を設定できます。
モードには下記の四つがあります
`r` 読み込み
`w` 書き込み
`a` 書き込み、追記
`r+ (読み＋書き)`

#random
乱数を使う時は`ramdom`というライブラリを利用できます。
`random`ライブラリには
`choice`と呼ばれる、シーケンスの中からランダムで１つの要素を取り出すメソッド
`shuffle`と呼ばれる、シーケンスの中身をシャッフルするメソッドがあります。

```py
import random
sample = ([0,1,2,3,4])

print(random.choice(sample))

#出力結果１
2
#出力結果２
1
#出力結果３ 
4

print(sample[0])
random.shuffle(sample)
print(sample[0])
#出力結果１
0
2
#出力結果２
0
3
#出力結果３ 
0
1
```

#アクセス制限
メソッドの前に`_`や`__`をつけることによって外部からのアクセスを制限することができます。
`_`の数でアクセスの制限のレベルを分けることができます。
またクラスの内部から呼び出す際には、`_`の数によって呼び出し方が変わります。

```py
class Fruit:
  def fruit1(self):
    print('apple')
  def _fruit2(self):
    print('orange')
  def __fruit3(self):
    print('banana')

fruit = Fruit()
fruit.fruit1()
fruit._fruit2()
fruit._Fruit__fruit3()

```

#Dictionary型
`Key`と`Value`をセットにして配列を作る。
`key`を指定して`value`の値を取得することができます。

```py
user = {"Name": "John", "E-mail": "john@gmail.com", "Nationality": "Mexico"}

print(user["Name"])
#出力結果
John

#追加
user["Hobby"]="Travel"
#削除
del user["Hobby"]

for key in user:
  print("His " + key + " is " + user[key].)
#出力結果
His Name is John
His E-mail is john@gmail.com
His Nationality is Mexico

```

#スライス
配列から指定された範囲で取り出すこと

```python
sample = [1,2,3,4,5]
print(sample[1:3])
print(sample[1:])

#出力結果
[2, 3]
[2, 3, 4, 5]

```

#reモジュール
`re`モジュールは正規表現を操作するライブラリーです。
`match`,`search`,`sub`と呼ばれる頻繁に使われるメソッドがあります。
・`match`：第二引数の先頭が、第一引数と同じかを調べる
・`search`：第二引数の全体から、第一引数と同じものを調べる
・`sub`：第三引数の中から第一引数の値を探し、第一引数で置き換える。

```python

import re

print(re.match('H|h', 'Hello'))
print(re.match('M|m', 'Good Morning'))
#出力結果
<re.Match object; span=(0, 1), match='H'>
None

print(re.search('H|h', 'Hello'))
print(re.search('M|m', 'Good Morning'))
#出力結果
<re.Match object; span=(0, 1), match='H'>
<re.Match object; span=(5, 6), match='M'>

print(re.sub(`H|h`,'-sub', 'Hello'))
print(re.sub(`Morning`,'-sub', 'Good Morning'))
#出力結果
-subello
Good -sub

```

参考文献・サイト
・[土日でわかるPythonプログラミング教室](https://www.amazon.co.jp/%EF%BD%9E%E7%9F%AD%E6%9C%9F%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7%EF%BD%9E-%E5%9C%9F%E6%97%A5%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99%E5%AE%A4-%E7%92%B0%E5%A2%83%E3%81%A5%E3%81%8F%E3%82%8A%E3%81%8B%E3%82%89Web%E3%82%A2%E3%83%97%E3%83%AA%E3%81%8C%E5%8B%95%E3%81%8F%E3%81%BE%E3%81%A7%E3%81%AE2%E6%97%A5%E9%96%93%E3%82%B3%E3%83%BC%E3%82%B9-%E5%90%89%E8%B0%B7-%E6%84%9B-ebook/dp/B075M5F7L9)
・[Linuxコマンド逆引き大全 Index
](https://tech.nikkeibp.co.jp/it/article/COLUMN/20060224/230579/)・[サルでもわかるGit入門 〜バージョン管理を使いこなそう〜](https://backlog.com/ja/git-tutorial/)
・[Python3からMeCabを使う](https://qiita.com/taroc/items/b9afd914432da08dafc8)
・[Pythonで学ぶ 基礎からのプログラミング入門](https://news.mynavi.jp/article/python-19/)