ChatGPTに書いてもらったPythonコード集

プログラミングを始めて1年弱、やりたいことをやるスピードにコードを書く実力が伴っていない。

そんな時はAIに頼ろう。

# ChatGPTとは？
ChatGPTは、OpenAIが開発した言語モデルです。ChatGPTは、大量のテキストデータを学習して、人間のような文章を生成することができます。ChatGPTは質問応答、文書生成、機械翻訳など、様々なタスクに使用されています。GPTは「Generative Pretrained Transformer」の略で、「生成的な事前学習トランスフォーマー」の意味です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603818/2b1c71c2-a981-7bb3-8f26-cf5f47ca07ee.png)
上の文章もChatGPTに書いてもらった。

以下、コード集もすべて、ChatGPTが書いてくれた。

# Q. 誕生日を入力すると現在の年齢がわかるPythonの関数を出力して
次の関数を使用することで、誕生日を入力すると現在の年齢が計算されます。

```Python
from datetime import datetime

def calculate_age(birthday):
    today = datetime.today()
    age = today.year - birthday.year
    if today.month < birthday.month or (today.month == birthday.month and today.day < birthday.day):
        age -= 1
    return age

birthday = datetime(year=1997, month=5, day=7)
print(calculate_age(birthday))
```

# Q. "グー"、"チョキ"、"パー"のいずれかを入力すると自動で"グー"、"チョキ"、"パー"が回答されるPythonの関数出力して
次の関数を使用することで、「グー」、「チョキ」、「パー」のいずれかを入力すると自動で「グー」、「チョキ」、「パー」が回答されます。
```Python
import random

def play_rock_paper_scissors(player_choice):
    options = ["グー", "チョキ", "パー"]
    computer_choice = random.choice(options)
    return computer_choice

player_choice = "グー"
print(play_rock_paper_scissors(player_choice))
```
ここで、player_choiceは「グー」、「チョキ」、「パー」のいずれかを示す文字列です。

# Q. 身長を体重を入力するとBMIが算出されるPythonの関数を出力して
次の関数を使用してBMIを計算することができます。
```Python
def calculate_bmi(height, weight):
    bmi = weight / (height ** 2)
    return bmi
```
使用方法:
```Python
height = 1.75
weight = 70
bmi = calculate_bmi(height, weight)
print("BMI is:", bmi)
```

# Q. OpenCVを使って、ぼやけた画像かぼやけていない画像かを判定するPythonの関数を教えて。
```Python
import cv2
import numpy as np

def is_image_blurry(image, threshold=100):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    fm = cv2.Laplacian(gray, cv2.CV_64F).var()
    if fm < threshold:
        return True
    else:
        return False
```
この関数は、入力画像がぼやけている場合にはTrueを、そうでない場合にはFalseを返します。threshold引数は、ぼやけているかどうかを判定するためのしきい値を調整するために使用されます。これは、Laplacian変換によって計算される画像のシャープネス測度に基づいています。Laplacian変換によって得られた画像のシャープネス測度がしきい値未満の場合、画像はぼやけていると判断されます。

以下は、この関数を使用する例です。

```Python
image = cv2.imread('example.jpg')
if is_image_blurry(image):
    print('The image is blurry')
else:
    print('The image is not blurry')
```

# Q. OpenCVを使って画像の色の三原色レベルを算出し、設定した閾値以上に赤かったらtrue、閾値以下だったらTrueと判定するPythonの関数教えて。

以下は、OpenCVを使用して画像の赤い色のレベルを計算し、閾値以上である場合にTrueを返すPythonの関数の例です。

```Python
import cv2
import numpy as np

def is_image_red(image, threshold=100):
    # 画像の赤い色の成分を計算する
    b, g, r = cv2.split(image)
    red_level = np.mean(r)

    # 設定された閾値と比較する
    if red_level >= threshold:
        return True
    else:
        return False
```
この関数は、入力画像が赤い色のレベルが指定された閾値以上である場合にTrueを、そうでない場合にFalseを返します。threshold引数は、赤い色のレベルのしきい値を調整するために使用されます。

以下は、この関数を使用する例です。
```Python
image = cv2.imread('example.jpg')
if is_image_red(image, threshold=150):
    print('The image has a lot of red')
else:
    print('The image does not have a lot of red')
```
この例では、example.jpgというファイル名の画像が読み込まれ、赤い色のレベルが150以上であるかどうかが判定されます。必要に応じて、しきい値の値を調整してください。



# Q. OpenCVを使って、画像中に特定の閾値以上の濃い色をした細胞をカウントし、カウント数が30以上であればTrue、30未満であればFalseと判定するPythonの関数を教えて。


以下は、OpenCVを使用して画像中に特定の閾値以上の濃い色をした細胞をカウントし、カウント数が30以上であればTrue、30未満であればFalseと判定するPythonの関数の例です。
```Python
import cv2
import numpy as np

def count_dark_cells(image, threshold=100, min_cell_area=100):
    # 画像をグレースケールに変換する
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # しきい値処理を行い、閾値以上の画素を白、以下を黒にする
    _, thresh = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)

    # 膨張処理を行い、小さな穴を埋める
    kernel = np.ones((3,3), np.uint8)
    dilated = cv2.dilate(thresh, kernel, iterations=1)

    # 物体検出を行い、面積が指定された最小値以上の物体を取得する
    contours, hierarchy = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cells = []
    for contour in contours:
        area = cv2.contourArea(contour)
        if area >= min_cell_area:
            cells.append(contour)

    # 物体の数が指定された閾値以上であるかどうかを判定する
    if len(cells) >= 30:
        return True
    else:
        return False

```
この関数は、入力画像中に、指定された閾値以上の濃い色をした細胞が30個以上ある場合にTrueを、そうでない場合にFalseを返します。threshold引数は、しきい値を調整するために使用されます。min_cell_area引数は、取得される物体の最小面積を指定するために使用されます。これにより、小さなノイズ物体が除去されます。

以下は、この関数を使用する例です。

```Python
image = cv2.imread('example.jpg')
if count_dark_cells(image, threshold=100, min_cell_area=100):
    print('There are 30 or more dark cells in the image')
else:
    print('There are less than 30 dark cells in the image')

```
この例では、example.jpgというファイル名の画像が読み込まれ、濃い色をした細胞の数が30以上であるかどうかが判定されます。必要に応じて、閾値と物体の最小面積の値を調整してください。




# Q. 愛するこどものためのラップを作って
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603818/a9fdeec5-130f-cca9-be88-85a3d7b7fd5e.png)

ふざけたら怒られた。
また増えたら追記する。