シェルスクリプトマガジン

Pythonあれこれ(Vol.84掲載)

著者:飯尾 淳

本連載では「Pythonを昔から使っているものの、それほど使いこなしてはいない」という筆者が、いろいろな日常業務をPythonで処理することで、立派な「蛇使い」に育つことを目指します。その過程を温
かく見守ってください。皆さんと共に勉強していきましょう。第14回では、話題のAIチャットボット「ChatGPT」を使ったPythonプログ「ラムの作成にチャレンジします。ChatGPTは、どの程度のプログラムを生成してくれるのでしょうか。

シェルスクリプトマガジン Vol.84は以下のリンク先でご購入できます。

図2 1回目にChatGPTが生成したPythonプログラム

import sys

if len(sys.argv) < 3:
    print("Usage: python program_name.py num1 num2")
else:
    num1 = float(sys.argv[1])
    num2 = float(sys.argv[2])
    result = num1 + num2
    print("Result:", result)

図3 2回目にChatGPTが生成したPythonプログラム

import sys
from fractions import Fraction

if len(sys.argv) < 3:
    print("Usage: python program_name.py num1 num2")
else:
    try:
        num1 = float(sys.argv[1])
        num2 = float(sys.argv[2])
        if num1.is_integer() and num2.is_integer():
            num1, num2 = int(num1), int(num2)
        elif '/' in sys.argv[1] and '/' in sys.argv[2]:
            num1 = Fraction(sys.argv[1])
            num2 = Fraction(sys.argv[2])
        result = num1 + num2
        print("Result:", result)
    except ValueError:
        print("Please enter numbers only.")

図4 3回目にChatGPTが生成したPythonプログラム

import sys
from fractions import Fraction

if len(sys.argv) < 3:
    print("Usage: python program_name.py num1 num2")
else:
    try:
        num1 = 0
        if '/' in sys.argv[1]:
            num1 = Fraction(sys.argv[1])
        else:
            num1 = float(sys.argv[1])
        num2 = 0
        if '/' in sys.argv[2]:
            num2 = Fraction(sys.argv[2])
        else:
            num2 = float(sys.argv[2])
        result = num1 + num2
        print("Result:", result)
    except ValueError:
        print("Please enter numbers only.")

図5 4回目にChatGPTが生成したPythonプログラム

import sys
from fractions import Fraction

def check_arg_validity(arg):
    try:
        if '/' in arg:
            num = Fraction(arg)
        else:
            num = float(arg)
        return num
    except ValueError:
        return None

if len(sys.argv) < 3:
    print("Usage: python program_name.py num1 num2")
else:
    try:
        num1 = check_arg_validity(sys.argv[1])
        num2 = check_arg_validity(sys.argv[2])
        if num1 is None or num2 is None:
            print("Please enter numbers only.")
        else:
            result = num1 + num2
            print("Result:", result)

図6 5回目にChatGPTが生成したPythonプログラム

import sys
from fractions import Fraction

def check_number(num_str):
    try:
        float(num_str)
    except ValueError:
        try:
            Fraction(num_str)
        except ValueError:
            print(f"{num_str} is not a valid number.")
            return None
    return num_str

def add2(num1, num2):
    result = Fraction(num1) + Fraction(num2)
    print(f"{num1} + {num2} = {result}")

if __name__ == '__main__':
    num1 = check_number(sys.argv[1])
    num2 = check_number(sys.argv[2])

    if num1 and num2:
        add2(num1, num2)