OzoneAsai commited on
Commit
9ebdb04
·
1 Parent(s): 9f639c6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -136
app.py CHANGED
@@ -1,149 +1,51 @@
1
- # 必要なライブラリをインポート
2
  import streamlit as st
3
- from sympy import symbols, expand, factor, Eq, solve, diff, N, simplify, factorial, parse_expr
4
- import math
5
- from scipy.optimize import fsolve
6
 
7
- # Streamlitアプリのタイトルを設定
8
- st.title("数学関数アプリ")
 
9
 
10
- # サイドバーに説明を追加
11
- st.sidebar.header("機能説明")
12
- st.sidebar.markdown("- 因数分解(Sympy)")
13
- st.sidebar.markdown("- 展開(Sympy)")
14
- st.sidebar.markdown("- 方程式(Sympy)")
15
- st.sidebar.markdown("- 連立方程式(Sympy)")
16
- st.sidebar.markdown("- nPm, nCm")
17
- st.sidebar.markdown("- 多項式への代入計算")
18
- st.sidebar.markdown("- ふたつの関数の交点の計算")
19
- st.sidebar.markdown("- 三平方の定理(空欄補充)")
20
 
21
- # Symbolの定義
22
- #user_defined_symbol= symbols("x")
23
- #user_defined_symbol = st.sidebar.text_input("Symbolを定義してください(カンマ区切り):")
24
 
25
- # カンマ区切りで複数のSymbolを作成
26
- #user_defined_symbols = symbols(user_defined_symbol.replace(" ", "").split(","))
 
 
 
27
 
28
- # メインのコンテンツを作成
29
- selected_function = st.sidebar.selectbox("機能を選択", ["因数分解", "展開", "方程式", "連立方程式", "nPm", "nCm", "多項式への代入計算", "関数の交点", "三平方の定理"])
 
30
 
31
- # 因数分解
32
- if selected_function == "因数分解":
33
- expression = st.text_input("因数分解する式を入力してください:")
34
- if expression:
35
- x = symbols('x')
36
- factored_expression = factor(expression)
37
 
38
- # シンボルの代入
39
- #for symbol in user_defined_symbols:
40
- # factored_expression = factor(expression)
41
 
42
- st.success(f"因数分解結果: {factored_expression}")
 
 
 
43
 
 
 
 
44
 
 
 
45
 
46
- # 展開(Sympy)
47
- elif selected_function == "展開":
48
- expression = st.text_input("展開する式を入力してください:")
49
- if expression:
50
- result = expand(expression)
51
- st.success(f"展開結果: {result}")
52
 
53
- # 方程式(Sympy)
54
- # 方程式(Sympy)
55
- # 方程式(Sympy)
56
- elif selected_function == "方程式":
57
- equation = st.text_input("解きたい方程式を入力してください:")
58
- if equation:
59
- x = symbols('x', real=True)
60
- solution = solve(equation, x)
61
- st.success(f"方程式の解: {solution}")
62
-
63
-
64
- # 連立方程式(Sympy)
65
- elif selected_function == "連立方程式":
66
- eq1 = st.text_input("1つ目の方程式を入力してください:")
67
- eq2 = st.text_input("2つ目の方程式を入力してください:")
68
- if eq1 and eq2:
69
- x, y = symbols('x y', real=True)
70
- solution = solve([Eq(eval(eq1), 0), Eq(eval(eq2), 0)], (x, y))
71
- st.success(f"連立方程式の解: {solution}")
72
-
73
- # nPm
74
- elif selected_function == "nPm":
75
- n = st.number_input("nを入力してください:", min_value=0, step=1)
76
- m = st.number_input("mを入力してください:", min_value=0, step=1)
77
- if n >= m:
78
- result = factorial(n) / factorial(n - m)
79
- st.success(f"{n}P{m}の結果: {result}")
80
-
81
- # nCm
82
- elif selected_function == "nCm":
83
- n = st.number_input("nを入力してください:", min_value=0, step=1)
84
- m = st.number_input("mを入力してください:", min_value=0, step=1)
85
- if n >= m:
86
- result = math.comb(n, m)
87
- st.success(f"{n}C{m}の結果: {result}")
88
-
89
- # 多項式への代入計算
90
- elif selected_function == "多項式への代入計算":
91
- poly_expression = st.text_input("多項式を入力してください:")
92
- value_to_substitute = st.number_input("代入する値を入力してください:")
93
- if poly_expression:
94
- x = symbols('x', real=True)
95
- poly = simplify(poly_expression)
96
- result = poly.subs(x, value_to_substitute)
97
- st.success(f"代入計算の結果: {result}")
98
-
99
- # ふたつの関数の交点の計算
100
- elif selected_function == "関数の交点":
101
- func1_expression = st.text_input("1つ目の関数を入力してください:")
102
- func2_expression = st.text_input("2つ目の関数を入力してください:")
103
- if func1_expression and func2_expression:
104
- x = symbols('x', real=True)
105
- func1 = simplify(parse_expr(func1_expression))
106
- func2 = simplify(parse_expr(func2_expression))
107
-
108
- # 関数を数値的に解くためのラムダ関数
109
- equation_system = lambda x: [func1.subs('x', x[0]) - func2.subs('x', x[0]),
110
- func1.subs('x', x[1]) - func2.subs('x', x[1])]
111
-
112
- # 初期値の設定
113
- initial_guess = [0, 0]
114
-
115
- # fsolveを使用して交点を求める
116
- intersection_points = fsolve(equation_system, initial_guess)
117
-
118
- st.success(f"関数の交点の座標: {tuple(intersection_points)}")
119
-
120
-
121
- # 三平方の定理(空欄補充)
122
- elif selected_function == "三平方の定理":
123
- case = st.radio("三平方の定理のケースを選択してください:", ["Case1", "Case2", "Case3"])
124
-
125
- if case == "Case1":
126
- a = st.number_input("aの値を入力してください:")
127
- b = st.number_input("bの値を入力してください:")
128
- c_squared = a**2 + b**2
129
- st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, c^2 = {c_squared}")
130
-
131
- elif case == "Case2":
132
- a = st.number_input("aの値を入力してください:")
133
- c = st.number_input("cの値を入力してください:")
134
- b_squared = c**2 - a**2
135
- if b_squared >= 0:
136
- b = b_squared**0.5
137
- st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, b^2 = {b_squared}, b = {b}")
138
- else:
139
- st.error("無効な値です。b^2は負になりません。")
140
-
141
- elif case == "Case3":
142
- b = st.number_input("bの値を入力してください:")
143
- c = st.number_input("cの値を入力してください:")
144
- a_squared = c**2 - b**2
145
- if a_squared >= 0:
146
- a = a_squared**0.5
147
- st.success(f"三平方の定理の結果: a^2 + b^2 = c^2, a^2 = {a_squared}, a = {a}")
148
- else:
149
- st.error("無効な値です。a^2は負になりません。")
 
 
1
  import streamlit as st
2
+ import datetime
3
+ import hashlib
4
+ import csv
5
 
6
+ # Function to hash the IP address
7
+ def hash_ip(ip_address):
8
+ return hashlib.sha256(ip_address.encode()).hexdigest()[:10]
9
 
10
+ # Function to save messages to CSV file
11
+ def save_to_csv(messages):
12
+ with open("messages.csv", mode="w", newline="", encoding="utf-8") as file:
13
+ writer = csv.writer(file)
14
+ writer.writerow(["Timestamp", "Name", "Message"])
 
 
 
 
 
15
 
16
+ for msg in messages:
17
+ writer.writerow([msg["timestamp"], msg["name"], msg["message"]])
 
18
 
19
+ # Function to display messages with decoded line breaks
20
+ def display_messages(messages):
21
+ for msg in messages:
22
+ decoded_message = msg["message"].replace("\¥n", "\n") # Fix: Replace "\¥n" with "\n"
23
+ st.chat_message(f"{msg['timestamp']} - {msg['name']}: {decoded_message}")
24
 
25
+ # Main Streamlit app
26
+ def main():
27
+ st.title("Simple IRC using Streamlit")
28
 
29
+ # Initialize messages list
30
+ messages = []
 
 
 
 
31
 
32
+ # Chat input for sending messages
33
+ user_input = st.chat_input("Your message", key="input")
 
34
 
35
+ # Process the submitted message
36
+ if user_input:
37
+ # Hash the IP address as the user's name
38
+ user_name = hash_ip("user_ip_address") # Replace "user_ip_address" with the actual IP address
39
 
40
+ # Save the message with timestamp
41
+ timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
42
+ messages.append({"name": user_name, "message": user_input, "timestamp": timestamp})
43
 
44
+ # Save messages to CSV
45
+ save_to_csv(messages)
46
 
47
+ # Display updated messages with decoded line breaks
48
+ display_messages(messages)
 
 
 
 
49
 
50
+ if __name__ == "__main__":
51
+ main()