---
# System prepended metadata

title: Problem 1(期末)

---

程式說明:詢問Chat GPT，初期使用"re"模塊，而本人較不習慣，因此將其修改為較為簡易，導入"math"模塊。使用者輸入a,b,c三個數值，輸出結果將列出"多因式分解"結果。同時當輸入數值錯誤，則再次或的輸入機會，並提示。

程式執行截圖(我將其放置程式碼下方，感謝)
程式碼(主要程式):
```python
import math   #重新輸入機會
from IPython.display import HTML

while True:
    try:
        a = int(input("請輸入 a: "))
        b = int(input("請輸入 b: "))
        c = int(input("請輸入 c: "))
        break  # 如果輸入成功，跳出迴圈
    except ValueError:
        print("輸入格式錯誤，請重新輸入！")

print(f'Your equation:\n{a} x^2 + {b} x + {c} = 0')

d = b * b - 4 * a * c
print('D =', '{0:g}'.format(d))

if d > 0:
    x1 = (-b + math.sqrt(d)) / (2 * a)
    x2 = (-b - math.sqrt(d)) / (2 * a)

    html_text = f'<font color="green">{a} x^2 + {b} x + {c} = (x + {x1:.2f})(x + {x2:.2f})</font>'
    display(HTML(html_text))

elif d == 0:
    x = -b / (2 * a)
    html_text = f'<font color="blue">x = {x:.2f}</font>'
    display(HTML(html_text))

else:
    html_text = f'<font color="red">無解</font>'
    display(HTML(html_text))
    real_part = -b / (2 * a)
    imaginary_part = math.sqrt(abs(d)) / (2 * a)
    x1 = complex(real_part, imaginary_part)
    x2 = complex(real_part, -imaginary_part)
    html_text = f'<font color="red">x1 = {x1}</font>'
    display(HTML(html_text))
    html_text = f'<font color="red">x2 = {x2}</font>'
    display(HTML(html_text))

```
![](https://hackmd.io/_uploads/HkdL_vJo2.png)
![](https://hackmd.io/_uploads/BypO_Pksh.png)

測試用程式碼(pytest):
```python
import math     #測試用程式
from equation_solver import solve_equation

def test_solve_equation():
    # Test case 1: D > 0 (Two real roots)
    a, b, c = 1, -3, 2
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert math.isclose(roots[0], 2.0, rel_tol=1e-6)
    assert math.isclose(roots[1], 1.0, rel_tol=1e-6)

    # Test case 2: D == 0 (One real root)
    a, b, c = 1, -4, 4
    roots = solve_equation(a, b, c)
    assert len(roots) == 1
    assert math.isclose(roots[0], 2.0, rel_tol=1e-6)

    # Test case 3: D < 0 (Two complex roots)
    a, b, c = 1, 2, 5
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert roots[0] == complex(-1.0, 2.0)
    assert roots[1] == complex(-1.0, -2.0)

    # Test case 4: D > 0 (Different coefficients)
    a, b, c = 2, 3, -5
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert math.isclose(roots[0], 1.0, rel_tol=1e-6)
    assert math.isclose(roots[1], -2.5, rel_tol=1e-6)

    # Test case 5: D == 0 (Different coefficients)
    a, b, c = 3, 0, 0
    roots = solve_equation(a, b, c)
    assert len(roots) == 1
    assert math.isclose(roots[0], 0.0, rel_tol=1e-6)

    # Test case 6: D < 0 (Different coefficients)
    a, b, c = 5, 1, 3
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert roots[0] == complex(-0.1, 1.4)
    assert roots[1] == complex(-0.1, -1.4)

    # Test case 7: a = 0 (Not a quadratic equation)
    a, b, c = 0, 3, 5
    roots = solve_equation(a, b, c)
    assert roots is None

    # Test case 8: b = 0 (Special case)
    a, b, c = 2, 0, -8
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert math.isclose(roots[0], 2.0, rel_tol=1e-6)
    assert math.isclose(roots[1], -2.0, rel_tol=1e-6)

    # Test case 9: c = 0 (Special case)
    a, b, c = 2, -6, 0
    roots = solve_equation(a, b, c)
    assert len(roots) == 2
    assert math.isclose(roots[0], 0.0, rel_tol=1e-6)
    assert math.isclose(roots[1], 3.0, rel_tol=1e-6)

    # Test case 10: a, b, c = 0 (Trivial case)
    a, b, c = 0, 0, 0
    roots = solve_equation(a, b, c)
    assert roots is None
```
測試結果(由於本人'CS50'出了點問題，由Chat GPT代理執行pytest):
![](https://hackmd.io/_uploads/ByfJ9Dyj2.png)


7/27期末考第一題，詢問Chat GPT連結:
https://chat.openai.com/share/fe609386-e46e-4ed8-89dd-a6af8d8cefe7