Python 二次方程式

Python3 例

二次方程式の形式は次のとおりです:ax2+bx+c=0。

その解は判別式を求めることでΔ=b2−4ac\Delta = b^2 - 4ac決定されます:

  1. もしΔ>0\Delta > 0の場合、方程式には2つの実数解があります。
  2. もしΔ=0\Delta = 0の場合、方程式には1つの実数解(重解)があります。
  3. もしΔ<0\Delta < 0の場合、方程式には実数解はありませんが、2つの複素数解があります。

以下の例は、ユーザーが数値を入力して二次方程式を計算するものです:

例(Python 3.0+)

# Filename: quadratic_solver.py # Author: www.example.com (ChatGPT による最適化) # プログラム機能: 二次方程式 ax**2 + bx + c = 0 を解く # 注意: a ≠ 0、a、b、c はユーザーが入力した実数です import cmath # cmath モジュールをインポートして、複素数演算をサポートします def get_float_input(prompt): """ユーザーが入力した浮動小数点数を取得し、不正な入力を処理します。 :param prompt: プロンプトメッセージ :return: ユーザーが入力した浮動小数点数""" while True: try: return float(input(prompt)) except ValueError: print("有効な数値を入力してください!") def solve_quadratic(a, b, c): """二次方程式の解を計算します。 :param a: 二次の係数 :param b: 一次の係数 :param c: 定数項 :return: 二次方程式の2つの解""" discriminant = b**2 - 4*a*c # 判別式を計算 root1 = (-b - cmath.sqrt(discriminant)) / (2 * a) root2 = (-b + cmath.sqrt(discriminant)) / (2 * a) return root1, root2 def main(): print("二次方程式 ax^2 + bx + c = 0 を解く") # ユーザー入力を取得 a = get_float_input("二次の係数 a を入力してください(a ≠ 0):") while a == 0: print("二次方程式の二次の係数 a は 0 にできません!") a = get_float_input("二次の係数 a を再入力してください(a ≠ 0):") b = get_float_input("一次の係数 b を入力してください:") c = get_float_input("定数項 c を入力してください:") # 計算して結果を出力 root1, root2 = solve_quadratic(a, b, c) print(f"方程式の解は:{root1} と {root2}") if __name__ == "__main__": main()

上記のコードを実行すると、出力結果は次のようになります:

求解二次方程 ax^2 + bx + c = 0
请输入二次项系数 a(a ≠ 0):1
请输入一次项系数 b:5
请输入常数项 c:6
方程的解为:(-3+0j) 和 (-2+0j)

この例では、cmath(complex math)モジュールの sqrt() メソッドを使用して平方根を計算しました。

例 2

import math
import cmath

def solve_quadratic(a, b, c):
    """
二次方程式 ax^2 + bx + c = 0 を解く
:param a: 二次の係数
:param b: 一次の係数
:param c: 定数項
:return: 方程式の解(実数または複素数の場合があります)
    """

    if a == 0:
        # 二次方程式以外の処理
        if b == 0:
            return "解なし" if c != 0 else "方程式には無限に多くの解があります"
        return f"方程式は一次方程式であり、解は x = {-c / b} です"
   
    # 判別式を計算
    delta = b**2 - 4*a*c
   
    if delta > 0:
        # 2つの実数解
        root1 = (-b + math.sqrt(delta)) / (2 * a)
        root2 = (-b - math.sqrt(delta)) / (2 * a)
        return f"方程式には2つの実数解があります:x1 = {root1}, x2 = {root2}"
    elif delta == 0:
        # 1つの実数解
        root = -b / (2 * a)
        return f"方程式には1つの重解(実数)があります:x = {root}"
    else:
        # 2つの複素数解
        root1 = (-b + cmath.sqrt(delta)) / (2 * a)
        root2 = (-b - cmath.sqrt(delta)) / (2 * a)
        return f"方程式には2つの複素数解があります:x1 = {root1}, x2 = {root2}"

# サンプル呼び出し
a, b, c = 1, -3, 2
result = solve_quadratic(a, b, c)
print(result)

Python3 例

その他の拡張