File size: 2,943 Bytes
3e7998b 2f94119 3e7998b 2f94119 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 8a4e70b 19d3674 3e7998b 19d3674 2f94119 19d3674 3e7998b 19d3674 8a4e70b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 19d3674 3e7998b 2f94119 3e7998b 19d3674 3e7998b 19d3674 2f94119 19d3674 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
\
import gradio as gr
import sympy as sp
TITLE = "LanguageBridge — Math Fast Agent (SymPy)"
def solve_math(q: str):
q = (q or "").strip()
if not q:
return "請輸入算式或方程,例如:2x+3=11;或:sin(x)**2 + cos(x)**2;或:factor(x**2-9)"
try:
# 情境 A:含 '=' → 視為(可能多條)方程,支援分號/換行分隔
if "=" in q:
# 將多行與分號斷開
parts = []
for seg in q.split(";"):
parts += [s.strip() for s in seg.split("\n")]
parts = [s for s in parts if s]
eqs = []
syms = set()
for s in parts:
if "=" not in s:
continue
left, right = s.split("=", 1)
L = sp.sympify(left)
R = sp.sympify(right)
eq = sp.Eq(L, R)
eqs.append(eq)
syms |= L.free_symbols | R.free_symbols
if not eqs:
return "沒有可解析的方程式。"
if not syms:
syms = {sp.symbols("x")}
# 解聯立(回傳 dict 列表)
sol = sp.solve(eqs, list(syms), dict=True)
if not sol:
return "無解或需要更多條件。"
lines = []
for i, s in enumerate(sol, 1):
lines.append(
"解 {}: ".format(i) + ", ".join(f"{k} = {sp.simplify(v)}" for k, v in s.items())
)
return "\n".join(lines)
# 情境 B:純表達式 → 嘗試簡化、因式、微分、積分
expr = sp.sympify(q)
out = []
try:
simp = sp.simplify(expr)
out.append(f"簡化:{simp}")
except Exception:
pass
try:
fac = sp.factor(expr)
if fac != expr:
out.append(f"因式分解:{fac}")
except Exception:
pass
try:
x = list(expr.free_symbols)[0] if expr.free_symbols else sp.symbols("x")
out.append(f"對 {x} 微分:{sp.diff(expr, x)}")
out.append(f"對 {x} 積分:{sp.integrate(expr, x)}")
except Exception:
pass
return "\n".join(out) if out else f"結果:{expr}"
except Exception as e:
return f"解析失敗:{e}"
with gr.Blocks(title=TITLE) as demo:
gr.Markdown(f"## {TITLE}\n- 貼上**算式/方程**(可多行;或用分號 `;` 分隔聯立)\n- 範例:`2x+3=11`、`x+y=3; x-y=1`、`sin(x)**2 + cos(x)**2`、`factor(x**2-9)`")
q = gr.Textbox(lines=6, label="題目 / 算式(可含聯立方程)")
out = gr.Textbox(lines=12, label="輸出")
btn = gr.Button("送出 🚀")
btn.click(solve_math, q, out)
if __name__ == "__main__":
# 在 Colab 預覽:一定要 share=True 才會印出 public URL
demo.launch(share=True)
|