Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| st.set_page_config(page_title="Scientific Calculator", page_icon="🧮", layout="centered") | |
| st.title("🧮 Scientific Calculator") | |
| # --- Session states for memory & history --- | |
| if "memory" not in st.session_state: | |
| st.session_state.memory = 0 | |
| if "history" not in st.session_state: | |
| st.session_state.history = [] | |
| # Input fields | |
| num1 = st.number_input("Enter first number:", format="%.6f") | |
| num2 = st.number_input("Enter second number (optional for unary ops):", format="%.6f", value=0.0) | |
| # Operation selection | |
| operation = st.selectbox( | |
| "Select operation:", | |
| [ | |
| "Add", "Subtract", "Multiply", "Divide", | |
| "Power", "Square Root (num1)", "Logarithm (num1)", | |
| "Sine (num1)", "Cosine (num1)", "Tangent (num1)" | |
| ] | |
| ) | |
| # Perform calculation | |
| result = None | |
| if st.button("Calculate"): | |
| try: | |
| if operation == "Add": | |
| result = num1 + num2 | |
| elif operation == "Subtract": | |
| result = num1 - num2 | |
| elif operation == "Multiply": | |
| result = num1 * num2 | |
| elif operation == "Divide": | |
| if num2 != 0: | |
| result = num1 / num2 | |
| else: | |
| st.error("Division by zero is not allowed.") | |
| elif operation == "Power": | |
| result = num1 ** num2 | |
| elif operation == "Square Root (num1)": | |
| result = np.sqrt(num1) | |
| elif operation == "Logarithm (num1)": | |
| if num1 > 0: | |
| result = np.log(num1) | |
| else: | |
| st.error("Logarithm is only defined for positive numbers.") | |
| elif operation == "Sine (num1)": | |
| result = np.sin(np.radians(num1)) | |
| elif operation == "Cosine (num1)": | |
| result = np.cos(np.radians(num1)) | |
| elif operation == "Tangent (num1)": | |
| result = np.tan(np.radians(num1)) | |
| if result is not None: | |
| st.success(f"Result: {result}") | |
| st.session_state.history.append(f"{operation}: {result}") | |
| except Exception as e: | |
| st.error(f"Error: {str(e)}") | |
| # --- Memory Functions --- | |
| st.subheader("Memory Functions") | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| if st.button("M+"): | |
| if result is not None: | |
| st.session_state.memory += result | |
| with col2: | |
| if st.button("M-"): | |
| if result is not None: | |
| st.session_state.memory -= result | |
| with col3: | |
| if st.button("MC"): | |
| st.session_state.memory = 0 | |
| st.info(f"Memory: {st.session_state.memory}") | |
| # --- History --- | |
| st.subheader("Calculation History") | |
| if st.session_state.history: | |
| for h in st.session_state.history[-10:][::-1]: # show last 10 | |
| st.write(h) | |
| else: | |
| st.write("No calculations yet.") | |