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コードにはいくつかの問題があります。これらの関数は二次方程式の解を計算しようとしていますが、エラーが含まれています。
qe_disc
関数への引数の不足:qe_solution1
とqe_solution2
の両方で、math.sqrt
を呼び出す際にqe_disc
関数に引数を渡していません。正しくはqe_disc(a, b, c)
のように引数を渡す必要があります。- ゼロ除算の可能性: このコードでは、
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(...)
となっていました)。
どうやら関数に引数を忘れていたようだ。いかにも初心者って感じのエラーだ。それはそうと解の公式自体も間違っていたようだ。義務教育の敗北である。違う、俺が義務教育に敗北したのだ。
敗北感を噛み締めながら次回に続く