OzoneAsai commited on
Commit
585b030
·
1 Parent(s): cc50641

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -17
app.py CHANGED
@@ -1,7 +1,7 @@
1
  # 必要なライブラリをインポート
2
  import streamlit as st
3
- from sympy import symbols, expand, factor, Eq, solve, diff, N, factorial, simplify
4
- import math
5
  # Streamlitアプリのタイトルを設定
6
  st.title("数学関数アプリ")
7
 
@@ -16,27 +16,34 @@ st.sidebar.markdown("- 多項式への代入計算")
16
  st.sidebar.markdown("- ふたつの関数の交点の計算")
17
  st.sidebar.markdown("- 三平方の定理(空欄補充)")
18
 
 
 
 
 
 
 
19
  # メインのコンテンツを作成
20
  selected_function = st.sidebar.selectbox("機能を選択", ["因数分解", "展開", "方程式", "連立方程式", "nPm", "nCm", "多項式への代入計算", "関数の交点", "三平方の定理"])
 
21
  # 因数分解
22
- elif selected_function == "因数分解":
23
  expression = st.text_input("因数分解する式を入力してください:")
24
  if expression:
25
- x = symbols('x') # xを定義
26
  factored_expression = factor(expression)
27
- st.success(f"因数分解結果: {factored_expression}")
 
28
  # 展開(Sympy)
29
- if selected_function == "展開":
30
  expression = st.text_input("展開する式を入力してください:")
31
  if expression:
32
  result = expand(expression)
33
- st.success(f"展開結果: {result}")
34
 
35
  # 方程式(Sympy)
36
  elif selected_function == "方程式":
37
  equation = st.text_input("解きたい方程式を入力してください:")
38
  if equation:
39
- x = symbols('x')
40
  solution = solve(Eq(eval(equation), 0), x)
41
  st.success(f"方程式の解: {solution}")
42
 
@@ -45,7 +52,7 @@ elif selected_function == "連立方程式":
45
  eq1 = st.text_input("1つ目の方程式を入力してください:")
46
  eq2 = st.text_input("2つ目の方程式を入力してください:")
47
  if eq1 and eq2:
48
- x, y = symbols('x y')
49
  solution = solve([Eq(eval(eq1), 0), Eq(eval(eq2), 0)], (x, y))
50
  st.success(f"連立方程式の解: {solution}")
51
 
@@ -54,27 +61,23 @@ elif selected_function == "nPm":
54
  n = st.number_input("nを入力してください:", min_value=0, step=1)
55
  m = st.number_input("mを入力してください:", min_value=0, step=1)
56
  if n >= m:
57
- result = math.factorial(n) / math.factorial(n - m)
58
  st.success(f"{n}P{m}の結果: {result}")
59
- else:
60
- st.error("nはm以上の値を取る必要があります。")
61
 
62
  # nCm
63
  elif selected_function == "nCm":
64
  n = st.number_input("nを入力してください:", min_value=0, step=1)
65
  m = st.number_input("mを入力してください:", min_value=0, step=1)
66
  if n >= m:
67
- result = math.factorial(n) / (math.factorial(m) * math.factorial(n - m))
68
  st.success(f"{n}C{m}の結果: {result}")
69
- else:
70
- st.error("nはm以上の値を取る必要があります。")
71
 
72
  # 多項式への代入計算
73
  elif selected_function == "多項式への代入計算":
74
  poly_expression = st.text_input("多項式を入力してください:")
75
  value_to_substitute = st.number_input("代入する値を入力してください:")
76
  if poly_expression:
77
- x = symbols('x') # xを定義
78
  poly = simplify(poly_expression)
79
  result = poly.subs(x, value_to_substitute)
80
  st.success(f"代入計算の結果: {result}")
@@ -84,7 +87,7 @@ elif selected_function == "関数の交点":
84
  func1_expression = st.text_input("1つ目の関数を入力してください:")
85
  func2_expression = st.text_input("2つ目の関数を入力してください:")
86
  if func1_expression and func2_expression:
87
- x = symbols('x') # xを定義
88
  func1 = simplify(func1_expression)
89
  func2 = simplify(func2_expression)
90
  intersection_points = solve(Eq(func1, func2), x)
 
1
  # 必要なライブラリをインポート
2
  import streamlit as st
3
+ from sympy import symbols, expand, factor, Eq, solve, diff, N, simplify, factorial, comb
4
+
5
  # Streamlitアプリのタイトルを設定
6
  st.title("数学関数アプリ")
7
 
 
16
  st.sidebar.markdown("- ふたつの関数の交点の計算")
17
  st.sidebar.markdown("- 三平方の定理(空欄補充)")
18
 
19
+ # Symbolの定義
20
+ user_defined_symbol = st.sidebar.text_input("Symbolを定義してください(カンマ区切り):")
21
+
22
+ # カンマ区切りで複数のSymbolを作成
23
+ user_defined_symbols = symbols(user_defined_symbol.replace(" ", "").split(","))
24
+
25
  # メインのコンテンツを作成
26
  selected_function = st.sidebar.selectbox("機能を選択", ["因数分解", "展開", "方程式", "連立方程式", "nPm", "nCm", "多項式への代入計算", "関数の交点", "三平方の定理"])
27
+
28
  # 因数分解
29
+ if selected_function == "因数分解":
30
  expression = st.text_input("因数分解する式を入力してください:")
31
  if expression:
 
32
  factored_expression = factor(expression)
33
+ st.success(f"因数分解結果: {factored_expression.subs(user_defined_symbols)}")
34
+
35
  # 展開(Sympy)
36
+ elif selected_function == "展開":
37
  expression = st.text_input("展開する式を入力してください:")
38
  if expression:
39
  result = expand(expression)
40
+ st.success(f"展開結果: {result.subs(user_defined_symbols)}")
41
 
42
  # 方程式(Sympy)
43
  elif selected_function == "方程式":
44
  equation = st.text_input("解きたい方程式を入力してください:")
45
  if equation:
46
+ x = symbols('x', real=True)
47
  solution = solve(Eq(eval(equation), 0), x)
48
  st.success(f"方程式の解: {solution}")
49
 
 
52
  eq1 = st.text_input("1つ目の方程式を入力してください:")
53
  eq2 = st.text_input("2つ目の方程式を入力してください:")
54
  if eq1 and eq2:
55
+ x, y = symbols('x y', real=True)
56
  solution = solve([Eq(eval(eq1), 0), Eq(eval(eq2), 0)], (x, y))
57
  st.success(f"連立方程式の解: {solution}")
58
 
 
61
  n = st.number_input("nを入力してください:", min_value=0, step=1)
62
  m = st.number_input("mを入力してください:", min_value=0, step=1)
63
  if n >= m:
64
+ result = factorial(n) / factorial(n - m)
65
  st.success(f"{n}P{m}の結果: {result}")
 
 
66
 
67
  # nCm
68
  elif selected_function == "nCm":
69
  n = st.number_input("nを入力してください:", min_value=0, step=1)
70
  m = st.number_input("mを入力してください:", min_value=0, step=1)
71
  if n >= m:
72
+ result = comb(n, m)
73
  st.success(f"{n}C{m}の結果: {result}")
 
 
74
 
75
  # 多項式への代入計算
76
  elif selected_function == "多項式への代入計算":
77
  poly_expression = st.text_input("多項式を入力してください:")
78
  value_to_substitute = st.number_input("代入する値を入力してください:")
79
  if poly_expression:
80
+ x = symbols('x', real=True)
81
  poly = simplify(poly_expression)
82
  result = poly.subs(x, value_to_substitute)
83
  st.success(f"代入計算の結果: {result}")
 
87
  func1_expression = st.text_input("1つ目の関数を入力してください:")
88
  func2_expression = st.text_input("2つ目の関数を入力してください:")
89
  if func1_expression and func2_expression:
90
+ x = symbols('x', real=True)
91
  func1 = simplify(func1_expression)
92
  func2 = simplify(func2_expression)
93
  intersection_points = solve(Eq(func1, func2), x)