File size: 2,473 Bytes
99994b9
 
 
aaad170
99994b9
 
 
 
 
 
 
 
 
 
9493d12
99994b9
9493d12
 
95d22d5
9493d12
451ff78
 
9493d12
451ff78
95d22d5
 
451ff78
 
3b8fa45
d340ce3
451ff78
 
70a201e
95d22d5
 
b51800b
99994b9
9493d12
451ff78
 
99994b9
451ff78
 
 
b51800b
70a201e
451ff78
 
99994b9
9493d12
451ff78
 
 
 
bacbaea
 
 
451ff78
 
 
 
 
9493d12
451ff78
 
99994b9
451ff78
 
 
 
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
# 必要なライブラリをインポート
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}")