| |
| import streamlit as st |
| import random |
| from sympy import symbols, expand, Eq |
|
|
| |
| 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 factor_expression(expression): |
| x = symbols('x') |
| factored_expression = factor(expression) |
|
|
| st.success(f"因数分解結果: {factored_expression}") |
| st.latex(factored_expression) |
| def generate_equation(): |
| |
| x = symbols('x') |
| generated_problems = [] |
| |
| wh=random.choice(["1","2"]) |
| if wh==1: |
| a = random.randint(min_value, max_value) |
| b = random.randint(min_value, max_value) |
| init_problem = f"(x + {a})*(x + {b})" |
| AExpression = expand(init_problem) |
| if wh==2: |
| a = random.randint(min_value, max_value) |
| b = random.randint(min_value, max_value) |
| init_problem = f"{a}*x + {b}" |
| AExpression = expand(init_problem) |
| a = random.randint(min_value, max_value) |
| b = random.randint(min_value, max_value) |
| Secondarial_init_problem = f"{a}*x + {b}" |
| sAExpression = expand(Secondarial_init_problem) |
| |
| equation = Eq(AExpression, sAExpression) |
|
|
| return equation |
|
|
| |
| if selected_function == "因数分解": |
| min_value = st.number_input("乱数の最小値を入力してください:", value=-10) |
| max_value = st.number_input("乱数の最大値を入力してください:", value=10) |
|
|
| |
| generate_button = st.button("問題を生成する") |
|
|
| if generate_button: |
| generated_problems = [] |
| |
| a = random.randint(min_value, max_value) |
| b = random.randint(min_value, max_value) |
| init_problem = f"(x + {a})*(x + {b})" |
| expression = expand(init_problem) |
| if expression: |
| st.success(f"問題: {expression}") |
| st.latex(expression) |
| if selected_function == "方程式": |
| min_value = st.number_input("乱数の最小値を入力してください:", value=-10) |
| max_value = st.number_input("乱数の最大値を入力してください:", value=10) |
|
|
| |
| generate_button = st.button("問題を生成する") |
| if generate_button: |
| |
| equation = generate_equation() |
| |
| |
| st.success(f"生成した方程式: {equation}") |
| st.latex(equation) |
|
|
| |
| solve_button = st.button("解を求める") |
|
|
| if solve_button: |
| |
| solutions = solve(equation) |
| st.success(f"方程式の解: {solutions}") |
|
|