Python 二次方程式
二次方程式の形式は次のとおりです:ax2+bx+c=0。
その解は判別式を求めることで決定されます:
- もしの場合、方程式には2つの実数解があります。
- もしの場合、方程式には1つの実数解(重解)があります。
- もしの場合、方程式には実数解はありませんが、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)
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)