【Python實作】求一元二次方程式的根
這篇用 Python 實作「求一元二次方程式的根」。重點是練習 input()、float()、if/else,以及用判別式判斷根的情況。
📘 Python 實作|求一元二次方程式的根
練習目的
這次的練習目標,是用 Python 寫出一個可以計算一元二次方程式根的程式。
- 練習 if/else 條件判斷。
- 練習數學運算子,例如 +、-、*、/、**。
- 練習使用 input() 取得使用者輸入。
- 練習使用 float() 將輸入轉成數字。
題目
求一元二次方程式 ax^2 + bx + c = 0 的根,讓使用者輸入 a、b、c。
因為是一元二次方程式,所以 a 不能等於 0。
如果 a = 0,就不是二次方程式了。
如果 a = 0,就不是二次方程式了。
🧭 邏輯規劃
寫程式前,先把解題流程拆開來看。
1. 取得使用者輸入
使用 input() 讓使用者輸入 a、b、c, 並用 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
請輸入 b:3
請輸入 c:-10
有兩個實數解:x1 = 2.0, x2 = -5.0
第二次:沒有實數解
請輸入 a:2
請輸入 b:2
請輸入 c:2
沒有實數解(判別式小於 0)。
請輸入 b:2
請輸入 c:2
沒有實數解(判別式小於 0)。
第三次:有一個重根
請輸入 a:1
請輸入 b:0
請輸入 c:0
有一個重根:x = -0.0
請輸入 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:計算平方根。
其實我覺得像這種「可以簡化成固定公式」的數學題目,用程式做都不會太難。
畢竟有了公式之後,剩下的就是計算,而那恰恰是程式最擅長的事情。
畢竟有了公式之後,剩下的就是計算,而那恰恰是程式最擅長的事情。
留言
張貼留言