【Python實作】求一元二次方程式的根

這篇用 Python 實作「求一元二次方程式的根」。重點是練習 input()float()if/else,以及用判別式判斷根的情況。

📘 Python 實作|求一元二次方程式的根

練習目的

這次的練習目標,是用 Python 寫出一個可以計算一元二次方程式根的程式。

  • 練習 if/else 條件判斷。
  • 練習數學運算子,例如 +-*/**
  • 練習使用 input() 取得使用者輸入。
  • 練習使用 float() 將輸入轉成數字。

題目

求一元二次方程式 ax^2 + bx + c = 0 的根,讓使用者輸入 abc

因為是一元二次方程式,所以 a 不能等於 0
如果 a = 0,就不是二次方程式了。

🧭 邏輯規劃

寫程式前,先把解題流程拆開來看。

1. 取得使用者輸入

使用 input() 讓使用者輸入 abc, 並用 float() 轉成數字。

接著要先判斷 a 是否等於 0。 如果等於 0,就提示使用者這不是一元二次方程式。

2. 計算判別式

一元二次方程式會用判別式判斷根的情況。

D = b**2 - 4*a*c

判別式的結果可以分成三種情況:

判別式 根的情況 說明
D > 0 兩個不相等的實數解 可以算出兩個不同的根。
D == 0 一個實數重根 兩個根相同。
D < 0 沒有實數解 若只討論實數,就沒有解。

3. 根的公式

D > 0 時,會有兩個實數解:

x1 = (-b + D**0.5) / (2*a) x2 = (-b - D**0.5) / (2*a)

D == 0 時,會有一個重根:

x = -b / (2*a)

🧪 完整程式碼

下面是完整的 Python 程式碼。

# 程式開始 # 求一元二次方程式 ax^2 + bx + c = 0 的根 # 輸入係數 a = float(input("請輸入 a:")) b = float(input("請輸入 b:")) c = float(input("請輸入 c:")) # 判斷是否為一元二次方程式(防呆) if a == 0: print("a 不能為 0,這就不是一元二次方程式了!") else: # 計算判別式 D = b**2 - 4*a*c # 根的情況判斷 if D > 0: # 兩個不相等的實數解 x1 = (-b + D**0.5) / (2*a) x2 = (-b - D**0.5) / (2*a) print(f"有兩個實數解:x1 = {x1}, x2 = {x2}") elif D == 0: # 一個實數重根 x = -b / (2*a) print(f"有一個重根:x = {x}") else: # 無實數解 print("沒有實數解(判別式小於 0)。") # 程式結束

🖥️ 程式執行結果

下面用三組不同輸入,測試三種常見情況。

第一次:有兩個實數解

請輸入 a:1
請輸入 b:3
請輸入 c:-10
有兩個實數解:x1 = 2.0, x2 = -5.0

第二次:沒有實數解

請輸入 a:2
請輸入 b:2
請輸入 c:2
沒有實數解(判別式小於 0)。

第三次:有一個重根

請輸入 a:1
請輸入 b:0
請輸入 c:0
有一個重根:x = -0.0
補充:Python 有時會顯示 -0.0。數學上它等同於 0.0,只是浮點數運算顯示上的小現象。

🔎 程式說明

接著把程式拆成幾段來看。

1. 輸入係數並轉成 float

a = float(input("請輸入 a:")) b = float(input("請輸入 b:")) c = float(input("請輸入 c:"))

使用者透過 input() 輸入的內容,預設會是字串。 如果要做數學運算,就需要用 float() 轉成數字。

2. 判斷 a 是否為 0

if a == 0: print("a 不能為 0,這就不是一元二次方程式了!")

一元二次方程式的最高次項是二次項,也就是 ax^2

如果 a = 0,二次項就消失了,方程式會變成一次方程式,因此要先防呆。

3. 計算判別式 D

D = b**2 - 4*a*c

D 是判別式,用來判斷根的種類。

  • b**2 表示 b 的平方。
  • 4*a*c 表示 4 乘以 a 再乘以 c。
  • D 的正負會影響是否有實數解。

4. 判斷 D 的三種情況

if D > 0: x1 = (-b + D**0.5) / (2*a) x2 = (-b - D**0.5) / (2*a) print(f"有兩個實數解:x1 = {x1}, x2 = {x2}") elif D == 0: x = -b / (2*a) print(f"有一個重根:x = {x}") else: print("沒有實數解(判別式小於 0)。")

如果 D > 0,代表有兩個不同的實數解。 如果 D == 0,代表兩個根相同,也就是重根。 如果 D < 0,在實數範圍內就沒有解。

🧭 執行流程整理

用表格整理整個程式流程,會更好理解。

步驟 程式做什麼 目的
1 輸入 a、b、c 取得方程式係數。
2 將輸入轉成 float 讓資料可以進行數學運算。
3 判斷 a 是否為 0 確認是不是一元二次方程式。
4 計算判別式 D 判斷根的類型。
5 根據 D 的結果分流 輸出兩個實數解、重根或無實數解。

✅ 小結

這個範例其實很適合拿來練習 Python 的條件判斷,因為它的數學邏輯很明確。

  • input():取得使用者輸入。
  • float():把輸入轉成可計算的數字。
  • if/else:根據不同情況執行不同程式。
  • D = b**2 - 4*a*c:用判別式判斷根的類型。
  • D**0.5:計算平方根。
其實我覺得像這種「可以簡化成固定公式」的數學題目,用程式做都不會太難。
畢竟有了公式之後,剩下的就是計算,而那恰恰是程式最擅長的事情。

留言

這個網誌中的熱門文章

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新