Download app.py from OzoneAsai/qMath: direct link, hf CLI and curl.
- Browser
- Download file 2.47 kB
-
https://huggingface.co/spaces/OzoneAsai/qMath/resolve/main/app.py
- Command line
-
hf download hf://spaces/OzoneAsai/qMath/app.py
-
curl -L -o app.py https://huggingface.co/spaces/OzoneAsai/qMath/resolve/main/app.py
2.47 kB
| # 必要なライブラリをインポート | |
| import streamlit as st | |
| import random | |
| from sympy import symbols, factor, Eq, solve, expand | |
| # Streamlitアプリのタイトルを設定 | |
| st.title("数学問題アプリ") | |
| # サイドバーに説明を追加 | |
| st.sidebar.header("構文説明") | |
| st.sidebar.markdown("$2x$と書きたい場合は「$2*x$」と、記述するように。また、平方根は$sqrt(2)$というように記述するように。") | |
| st.sidebar.markdown("割り算は`/`を使うように。掛け算は`*`を使うように。") | |
| # メインのコンテンツを作成 | |
| selected_function = st.sidebar.selectbox("問題形式を選択", ["因数分解", "方程式"]) | |
| x = symbols("x") | |
| def generate_equation(): | |
| wh = random.choice([1, 2]) | |
| AExpression, sAExpression = None, None | |
| if wh == 1: | |
| a, b = [random.randint(min_value, max_value) for _ in range(2)] | |
| init_problem = f"(x + {a})*(x + {b})" | |
| AExpression = expand(init_problem) | |
| elif wh == 2: | |
| a, b = [random.randint(min_value, max_value) for _ in range(2)] | |
| init_problem = f"{a} - {b}*x" | |
| AExpression = expand(init_problem) | |
| a, b = [random.randint(min_value, max_value) for _ in range(2)] | |
| Secondarial_init_problem = f"{a} - {b}*x" | |
| sAExpression = expand(Secondarial_init_problem) | |
| return AExpression, sAExpression | |
| def generate_problem(): | |
| a, b = [random.randint(min_value, max_value) for _ in range(2)] | |
| if selected_function == "因数分解": | |
| expression = expand(f"(x + {a})*(x + {b})") | |
| elif selected_function == "方程式": | |
| AExpression, sAExpression = generate_equation() | |
| expression = Eq(AExpression, sAExpression) if sAExpression else Eq(AExpression, b) | |
| return expression | |
| # 問題生成ボタン | |
| generate_button = st.button("問題を生成する") | |
| if generate_button: | |
| min_value = st.number_input("乱数の最小値を入力してください:", value=-10) | |
| max_value = st.number_input("乱数の最大値を入力してください:", value=10) | |
| expression = generate_problem() | |
| # 生成した問題の表示 | |
| st.success(f"生成した問題: {expression}") | |
| st.latex(expression) | |
| # 解を求めるボタン | |
| solve_button = st.button("解を求める") | |
| if solve_button and selected_function == "方程式": | |
| # 方程式の解を求める | |
| solutions = solve(expression) | |
| st.success(f"方程式の解: {solutions}") | |