Spaces:
Sleeping
Sleeping
import streamlit as st | |
import plotly.graph_objs as go | |
import numpy as np | |
# Basic arithmetic functions | |
def add(x, y): | |
return x + y | |
def subtract(x, y): | |
return x - y | |
def multiply(x, y): | |
return x * y | |
def divide(x, y): | |
if y == 0: | |
return "Error! Division by zero." | |
return x / y | |
# Advanced mathematical functions | |
def power(x, y): | |
return x ** y | |
def square_root(x): | |
if x < 0: | |
return "Error! Cannot calculate square root of a negative number." | |
return x ** 0.5 | |
def logarithm(x, base=10): | |
if x <= 0: | |
return "Error! Logarithm is undefined for non-positive numbers." | |
return np.log(x) / np.log(base) | |
# Trigonometric functions | |
def sin(x): | |
return np.sin(x) | |
def cos(x): | |
return np.cos(x) | |
def tan(x): | |
return np.tan(x) | |
# Graphing function | |
def plot_function(func, x_range): | |
x = np.linspace(x_range[0], x_range[1], 100) | |
y = func(x) | |
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='lines')) | |
fig.update_layout(title=f'Graph of {func.__name__}(x)', xaxis_title='x', yaxis_title='y') | |
return fig | |
# Streamlit app | |
def calculator(): | |
st.title("Enhanced Calculator with Graphs") | |
# Sidebar for basic calculations | |
st.sidebar.header("Basic Calculations") | |
num1 = st.sidebar.number_input("Enter the first number:", value=0.0, step=1.0) | |
num2 = st.sidebar.number_input("Enter the second number:", value=0.0, step=1.0) | |
operation = st.sidebar.selectbox("Choose an operation", | |
["Add", "Subtract", "Multiply", "Divide", "Power"]) | |
if st.sidebar.button("Calculate"): | |
if operation == "Add": | |
result = add(num1, num2) | |
elif operation == "Subtract": | |
result = subtract(num1, num2) | |
elif operation == "Multiply": | |
result = multiply(num1, num2) | |
elif operation == "Divide": | |
result = divide(num1, num2) | |
elif operation == "Power": | |
result = power(num1, num2) | |
st.sidebar.success(f"The result is: {result}") | |
# Main area for advanced functions and graphing | |
st.header("Advanced Functions") | |
func_choice = st.selectbox("Choose a function to graph", | |
["Sin", "Cos", "Tan", "Square Root", "Logarithm"]) | |
x_min = st.number_input("Enter the minimum x value:", value=-10.0, step=1.0) | |
x_max = st.number_input("Enter the maximum x value:", value=10.0, step=1.0) | |
if st.button("Generate Graph"): | |
if func_choice == "Sin": | |
fig = plot_function(sin, [x_min, x_max]) | |
elif func_choice == "Cos": | |
fig = plot_function(cos, [x_min, x_max]) | |
elif func_choice == "Tan": | |
fig = plot_function(tan, [x_min, x_max]) | |
elif func_choice == "Square Root": | |
fig = plot_function(square_root, [0, x_max]) # Adjust range for square root | |
elif func_choice == "Logarithm": | |
fig = plot_function(logarithm, [0.1, x_max]) # Adjust range for logarithm | |
st.plotly_chart(fig) | |
# Additional calculations | |
st.header("Additional Calculations") | |
extra_num = st.number_input("Enter a number for additional calculations:", value=1.0, step=1.0) | |
col1, col2 = st.columns(2) | |
with col1: | |
if st.button("Calculate Square Root"): | |
result = square_root(extra_num) | |
st.write(f"Square root of {extra_num} is: {result}") | |
with col2: | |
if st.button("Calculate Natural Logarithm"): | |
result = logarithm(extra_num, base=np.e) | |
st.write(f"Natural logarithm of {extra_num} is: {result}") | |
# Run the calculator app | |
if __name__ == '__main__': | |
calculator() |