Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 必要なライブラリをインポート
|
| 2 |
+
import streamlit as st
|
| 3 |
+
from sympy import symbols, expand, factor, Eq, solve, diff, N, comb, factorial, simplify
|
| 4 |
+
|
| 5 |
+
# Streamlitアプリのタイトルを設定
|
| 6 |
+
st.title("数学関数アプリ")
|
| 7 |
+
|
| 8 |
+
# サイドバーに説明を追加
|
| 9 |
+
st.sidebar.header("機能説明")
|
| 10 |
+
st.sidebar.markdown("- 因数分解(Sympy)")
|
| 11 |
+
st.sidebar.markdown("- 展開(Sympy)")
|
| 12 |
+
st.sidebar.markdown("- 方程式(Sympy)")
|
| 13 |
+
st.sidebar.markdown("- 連立方程式(Sympy)")
|
| 14 |
+
st.sidebar.markdown("- nPm, nCm")
|
| 15 |
+
st.sidebar.markdown("- 多項式への代入計算")
|
| 16 |
+
st.sidebar.markdown("- ふたつの関数の交点の計算")
|
| 17 |
+
st.sidebar.markdown("- 三平方の定理(空欄補充)")
|
| 18 |
+
|
| 19 |
+
# メインのコンテンツを作成
|
| 20 |
+
selected_function = st.sidebar.selectbox("機能を選択", ["因数分解", "展開", "方程式", "連立方程式", "nPm", "nCm", "多項式への代入計算", "関数の交点", "三平方の定理"])
|
| 21 |
+
|
| 22 |
+
if selected_function == "因数分解":
|
| 23 |
+
expression = st.text_input("因数分解する式を入力してください:")
|
| 24 |
+
if expression:
|
| 25 |
+
result = factor(expression)
|
| 26 |
+
st.success(f"因数分解結果: {result}")
|
| 27 |
+
|
| 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 |
+
|
| 43 |
+
# 連立方程式(Sympy)
|
| 44 |
+
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 |
+
|
| 52 |
+
# nPm
|
| 53 |
+
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 = factorial(n) / 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 = comb(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 |
+
poly = simplify(poly_expression)
|
| 78 |
+
result = poly.subs(x, value_to_substitute)
|
| 79 |
+
st.success(f"代入計算の結果: {result}")
|
| 80 |
+
|
| 81 |
+
# ふたつの関数の交点の計算
|
| 82 |
+
elif selected_function == "関数の交点":
|
| 83 |
+
func1_expression = st.text_input("1つ目の関数を入力してください:")
|
| 84 |
+
func2_expression = st.text_input("2つ目の関数を入力してください:")
|
| 85 |
+
if func1_expression and func2_expression:
|
| 86 |
+
func1 = simplify(func1_expression)
|
| 87 |
+
func2 = simplify(func2_expression)
|
| 88 |
+
intersection_points = solve(Eq(func1, func2), x)
|
| 89 |
+
st.success(f"関数の交点の座標: {intersection_points}")
|
| 90 |
+
|
| 91 |
+
# 三平方の定理(空欄補充)
|
| 92 |
+
elif selected_function == "三平方の定理":
|
| 93 |
+
# ここに三平方の定理の実装を追加する
|
| 94 |
+
|
| 95 |
+
# 三平方の定理(空欄補充)
|
| 96 |
+
elif selected_function == "三平方の定理":
|
| 97 |
+
case = st.radio("三平方の定理のケースを選択してください:", ["Case1", "Case2", "Case3"])
|
| 98 |
+
|
| 99 |
+
if case == "Case1":
|
| 100 |
+
a = st.number_input("aの値を入力してください:")
|
| 101 |
+
b = st.number_input("bの値を入力してください:")
|
| 102 |
+
c_squared = a**2 + b**2
|
| 103 |
+
st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, c^2 = {c_squared}")
|
| 104 |
+
|
| 105 |
+
elif case == "Case2":
|
| 106 |
+
a = st.number_input("aの値を入力してください:")
|
| 107 |
+
c = st.number_input("cの値を入力してください:")
|
| 108 |
+
b_squared = c**2 - a**2
|
| 109 |
+
if b_squared >= 0:
|
| 110 |
+
b = b_squared**0.5
|
| 111 |
+
st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, b^2 = {b_squared}, b = {b}")
|
| 112 |
+
else:
|
| 113 |
+
st.error("無効な値です。b^2は負になりません。")
|
| 114 |
+
|
| 115 |
+
elif case == "Case3":
|
| 116 |
+
b = st.number_input("bの値を入力してください:")
|
| 117 |
+
c = st.number_input("cの値を入力し��ください:")
|
| 118 |
+
a_squared = c**2 - b**2
|
| 119 |
+
if a_squared >= 0:
|
| 120 |
+
a = a_squared**0.5
|
| 121 |
+
st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, a^2 = {a_squared}, a = {a}")
|
| 122 |
+
else:
|
| 123 |
+
st.error("無効な値です。a^2は負になりません。")
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
|