Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import math | |
| # ----------------------------- | |
| # Page Configuration | |
| # ----------------------------- | |
| st.set_page_config( | |
| page_title="Advanced Calculator", | |
| page_icon="🧮", | |
| layout="centered" | |
| ) | |
| st.title("🧮 Advanced Calculator") | |
| st.write("Supports basic, power, modulus & scientific operations") | |
| # ----------------------------- | |
| # Safe math functions | |
| # ----------------------------- | |
| safe_dict = { | |
| "sqrt": math.sqrt, | |
| "log": math.log, | |
| "log10": math.log10, | |
| "sin": math.sin, | |
| "cos": math.cos, | |
| "tan": math.tan, | |
| "pi": math.pi, | |
| "e": math.e, | |
| "pow": pow, | |
| "abs": abs, | |
| "round": round | |
| } | |
| # ----------------------------- | |
| # Session state for history | |
| # ----------------------------- | |
| if "history" not in st.session_state: | |
| st.session_state.history = [] | |
| # ----------------------------- | |
| # Calculator UI | |
| # ----------------------------- | |
| expression = st.text_input( | |
| "Enter mathematical expression:", | |
| placeholder="Example: sqrt(25) + 2**3 or sin(pi/2)" | |
| ) | |
| st.markdown(""" | |
| **Allowed operations:** | |
| - `+ - * / % **` | |
| - `sqrt(x), log(x), log10(x)` | |
| - `sin(x), cos(x), tan(x)` | |
| - `pi, e` | |
| """) | |
| # ----------------------------- | |
| # Calculate Button | |
| # ----------------------------- | |
| if st.button("Calculate"): | |
| try: | |
| result = eval(expression, {"__builtins__": None}, safe_dict) | |
| st.success(f"Result: {result}") | |
| st.session_state.history.append(f"{expression} = {result}") | |
| except ZeroDivisionError: | |
| st.error("Error: Division by zero!") | |
| except Exception: | |
| st.error("Invalid expression!") | |
| # ----------------------------- | |
| # History Section | |
| # ----------------------------- | |
| if st.session_state.history: | |
| st.subheader("📜 Calculation History") | |
| for item in reversed(st.session_state.history): | |
| st.write(item) | |
| # ----------------------------- | |
| # Clear History | |
| # ----------------------------- | |
| if st.button("Clear History"): | |
| st.session_state.history = [] | |
| st.info("History cleared!") | |