CONTENTS コンテンツ

ChatGPTを使ってPythonを学ぼう!(3)

ChatGPTを使ってPythonを学ぼう!

2024.02.01

 Python学習編3回目です。

 前回はPythonを東京大学のページを使ってPythonを学ぶことにしました。早速やっていこう。

 昨日のうちに少し進めていて、1-2関数と変数から。読んでて、「おっ!」と思ったのが

ローカル変数の値など、関数の実行途中の状況を確認するには、 print というPythonが最初から用意してくれている関数(組み込み関数)を用いることができます。この print を関数内から呼び出すことでローカル変数の値を確認できます。(中略)print 関数を用いて変数の値を観察することは、プログラムの誤り(バグ)を見つけ、修正(デバッグ)する最も基本的な方法です。これは1-4でも改めて説明します。

これ。なるほどなぁ。人類の英知を感じる。

 感心しながら読み進めていたら練習問題に当たった。二次方程式の解の公式を計算する問題である。約20年前に通り過ぎた道…のはずだがエラーを吐いた。GPT先生、お願いします!

入力:以下のpythonコードのエラーの原因を教えてください

import math
def qe_disc(a, b, c): return b**2-4*a*c
def qe_solution1(a, b, c): return (b+math.sqrt(qe_disc))/2
def qe_solution2(a, b, c): return (b-math.sqrt(qe_disc))/2

出力:

このPythonコードにはいくつかの問題があります。これらの関数は二次方程式の解を計算しようとしていますが、エラーが含まれています。

  1. qe_disc 関数への引数の不足: qe_solution1qe_solution2 の両方で、math.sqrt を呼び出す際に qe_disc 関数に引数を渡していません。正しくは qe_disc(a, b, c) のように引数を渡す必要があります。
  2. ゼロ除算の可能性: このコードでは、a がゼロの場合の処理がありません。a がゼロの場合、この式は二次方程式ではなくなり、分母がゼロになるためエラーが発生します。

これらの問題を修正するためには、以下のようにコードを変更する必要があります:

pythonCopy code

import math

def qe_disc(a, b, c):
 return b**2 - 4*a*c

def qe_solution1(a, b, c):
 if a == 0: raise ValueError("Coefficient 'a' cannot be zero in a quadratic equation.")
 return (-b + math.sqrt(qe_disc(a, b, c))) / (2 * a)

def qe_solution2(a, b, c):
 if a == 0: raise ValueError("Coefficient 'a' cannot be zero in a quadratic equation.")
 return (-b - math.sqrt(qe_disc(a, b, c))) / (2 * a)

これにより、関数は正しい引数を使って二次方程式の解を計算し、a がゼロの場合にはエラーを報告します。また、解の公式において -b ± sqrt(...) の形を正しく実装しています(元のコードでは b ± sqrt(...) となっていました)。

 どうやら関数に引数を忘れていたようだ。いかにも初心者って感じのエラーだ。それはそうと解の公式自体も間違っていたようだ。義務教育の敗北である。違う、俺が義務教育に敗北したのだ。

敗北感を噛み締めながら次回に続く

この記事をシェアする