Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import math | |
| st.set_page_config(page_title="Calculator", layout="centered") | |
| # ---------- STATE ---------- | |
| if "expr" not in st.session_state: | |
| st.session_state.expr = "" | |
| def press(key): | |
| if key == "C": | |
| st.session_state.expr = "" | |
| elif key == "=": | |
| try: | |
| st.session_state.expr = str(eval(st.session_state.expr)) | |
| except: | |
| st.session_state.expr = "Error" | |
| elif key == "√": | |
| try: | |
| st.session_state.expr = str(math.sqrt(float(st.session_state.expr))) | |
| except: | |
| st.session_state.expr = "Error" | |
| elif key == "x²": | |
| try: | |
| st.session_state.expr = str(float(st.session_state.expr) ** 2) | |
| except: | |
| st.session_state.expr = "Error" | |
| elif key == "log": | |
| try: | |
| st.session_state.expr = str(math.log10(float(st.session_state.expr))) | |
| except: | |
| st.session_state.expr = "Error" | |
| else: | |
| st.session_state.expr += key | |
| # ---------- DISPLAY ---------- | |
| st.markdown( | |
| f""" | |
| <div style=" | |
| background:#111; | |
| color:white; | |
| padding:18px; | |
| font-size:30px; | |
| border-radius:12px; | |
| text-align:right; | |
| margin-bottom:12px; | |
| "> | |
| {st.session_state.expr or "0"} | |
| </div> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| # ---------- BUTTON GRID ---------- | |
| layout = [ | |
| ["C", "√", "x²", "/"], | |
| ["7", "8", "9", "*"], | |
| ["4", "5", "6", "-"], | |
| ["1", "2", "3", "+"], | |
| ["0", ".", "log", "="] | |
| ] | |
| for row in layout: | |
| cols = st.columns(4) | |
| for i, key in enumerate(row): | |
| if cols[i].button(key, use_container_width=True): | |
| press(key) | |
| st.rerun() | |