sets / app.py
OzoneAsai's picture
Update app.py
423493d verified
import streamlit as st
from sympy import symbols, solve, S, Interval, Eq
import matplotlib.pyplot as plt
import numpy as np
def main():
st.title("้›†ๅˆๆ“ไฝœใ‚ขใƒ—ใƒช")
# ใƒกใƒ‹ใƒฅใƒผใฎ้ธๆŠž
option = st.sidebar.selectbox("ๆฉŸ่ƒฝใ‚’้ธๆŠžใ—ใฆใใ ใ•ใ„", ["้›†ๅˆใฎๆ“ไฝœ", "ๅ…จไฝ“้›†ๅˆใฎ็”Ÿๆˆ", "่ฃœ้›†ๅˆใฎ่จˆ็ฎ—", "ไธ็ญ‰ๅผใฎ่จˆ็ฎ—"])
if option == "้›†ๅˆใฎๆ“ไฝœ":
set_operations()
elif option == "ๅ…จไฝ“้›†ๅˆใฎ็”Ÿๆˆ":
generate_universe()
elif option == "่ฃœ้›†ๅˆใฎ่จˆ็ฎ—":
complement_operation()
elif option == "ไธ็ญ‰ๅผใฎ่จˆ็ฎ—":
inequality_solver()
def parse_set(input_str):
if input_str:
try:
return set(map(int, input_str.split(',')))
except ValueError:
st.error("ๅ…ฅๅŠ›ใŒๆญฃใ—ใใ‚ใ‚Šใพใ›ใ‚“ใ€‚ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใฎๆ•ดๆ•ฐใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚")
return None
else:
st.error("ๅ…ฅๅŠ›ใŒ็ฉบใงใ™ใ€‚ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใฎๆ•ดๆ•ฐใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚")
return None
def set_operations():
st.header("้›†ๅˆใฎๆ“ไฝœ")
with st.form(key='set_operations_form'):
# ใƒฆใƒผใ‚ถใƒผๅ…ฅๅŠ›
set1 = st.text_input("้›†ๅˆ1 (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใง่ฆ็ด ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„)", "1,2,3")
set2 = st.text_input("้›†ๅˆ2 (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใง่ฆ็ด ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„)", "3,4,5")
set3 = st.text_input("้›†ๅˆ3 (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใง่ฆ็ด ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„)", "5,6,7")
# ใƒ•ใ‚ฉใƒผใƒ ้€ไฟกใƒœใ‚ฟใƒณ
submit_button = st.form_submit_button(label='ๅฎŸ่กŒ')
if submit_button:
# ๅ…ฅๅŠ›ใ•ใ‚ŒใŸๆ–‡ๅญ—ๅˆ—ใ‚’้›†ๅˆใซๅค‰ๆ›
set1 = parse_set(set1)
set2 = parse_set(set2)
set3 = parse_set(set3)
if set1 is not None and set2 is not None and set3 is not None:
# ้›†ๅˆใฎๆ“ไฝœ
st.subheader("้›†ๅˆใฎๆ“ไฝœ็ตๆžœ")
st.subheader("ๅ’Œ้›†ๅˆ")
union = set1.union(set2, set3)
st.write(union)
st.subheader("็ฉ้›†ๅˆ")
intersection = set1.intersection(set2, set3)
if intersection:
st.write(intersection)
else:
st.write("็ฉ้›†ๅˆใฎ็ตๆžœใฏ็ฉบใงใ™ใ€‚")
st.subheader("ๅทฎ้›†ๅˆ")
difference = set1.difference(set2, set3)
st.write(difference)
st.subheader("ๅฏพ็งฐๅทฎ")
symmetric_difference = set1.symmetric_difference(set2)
st.write(symmetric_difference)
def generate_universe():
st.header("ๅ…จไฝ“้›†ๅˆใฎ็”Ÿๆˆ")
with st.form(key='generate_universe_form'):
# ใƒฆใƒผใ‚ถใƒผๅ…ฅๅŠ›
initial_value = st.number_input("ๅˆๆœŸๅ€ค", value=0)
step = st.number_input("ใ‚นใƒ†ใƒƒใƒ—", value=1)
num_steps = st.number_input("ๅ›žๆ•ฐ", value=10, min_value=1)
# ใƒ•ใ‚ฉใƒผใƒ ้€ไฟกใƒœใ‚ฟใƒณ
submit_button = st.form_submit_button(label='็”Ÿๆˆ')
if submit_button:
# ๅ…จไฝ“้›†ๅˆใฎ็”Ÿๆˆ
universe_set = set(range(initial_value, initial_value + step * num_steps, step))
st.subheader("็”Ÿๆˆใ•ใ‚ŒใŸๅ…จไฝ“้›†ๅˆ")
st.write(universe_set)
def complement_operation():
st.header("่ฃœ้›†ๅˆใฎ่จˆ็ฎ—")
with st.form(key='complement_operation_form'):
# ๅ…จไฝ“้›†ๅˆใฎๆŒ‡ๅฎš
universe = st.text_input("ๅ…จไฝ“้›†ๅˆ (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใง่ฆ็ด ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„)", "1,2,3,4,5,6,7,8,9,10")
# ๅฏพ่ฑก้›†ๅˆใฎๆŒ‡ๅฎš
target_set = st.text_input("ๅฏพ่ฑก้›†ๅˆ (ใ‚ซใƒณใƒžๅŒบๅˆ‡ใ‚Šใง่ฆ็ด ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„)", "1,3,5")
# ใƒ•ใ‚ฉใƒผใƒ ้€ไฟกใƒœใ‚ฟใƒณ
submit_button = st.form_submit_button(label='่จˆ็ฎ—')
if submit_button:
# ๅ…ฅๅŠ›ใ•ใ‚ŒใŸๆ–‡ๅญ—ๅˆ—ใ‚’้›†ๅˆใซๅค‰ๆ›
universe_set = parse_set(universe)
target_set = parse_set(target_set)
if universe_set is not None and target_set is not None:
# ่ฃœ้›†ๅˆใฎ่จˆ็ฎ—
complement = universe_set.difference(target_set)
st.subheader("่ฃœ้›†ๅˆใฎ่จˆ็ฎ—็ตๆžœ")
st.write(complement)
def inequality_solver():
st.header("ไธ็ญ‰ๅผใฎ่จˆ็ฎ—")
with st.form(key='inequality_solver_form'):
# ใƒฆใƒผใ‚ถใƒผๅ…ฅๅŠ›
inequality_input = st.text_input("ไธ็ญ‰ๅผใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", "2*x >= 2")
# ใƒ•ใ‚ฉใƒผใƒ ้€ไฟกใƒœใ‚ฟใƒณ
submit_button = st.form_submit_button(label='่งฃใ‚’ๆฑ‚ใ‚ใ‚‹')
if submit_button:
# ไธ็ญ‰ๅผใฎ่งฃใ‚’ๆฑ‚ใ‚ใ‚‹
x = symbols('x')
inequality = eval(inequality_input)
solution = solve(inequality, x)
st.subheader("ไธ็ญ‰ๅผใฎ่งฃ")
st.write(Eq(str(solution).replace("& (x < oo)","")))
if __name__ == "__main__":
main()