1+ import re
2+ import math
3+
4+ def preprocess (expression ):
5+ # Replace caret with exponent operator
6+ expression = expression .replace ('^' , '**' )
7+
8+ # Replace square symbols like 5² with 5**2
9+ expression = re .sub (r'(\d+)²' , r'(\1**2)' , expression )
10+
11+ # Replace sqrt(x) with math.sqrt(x)
12+ expression = re .sub (r'sqrt\(([^)]+)\)' , r'math.sqrt(\1)' , expression )
13+
14+ return expression
15+
16+ def is_safe_expression (expr ):
17+ # Only allow numbers, operators, parentheses, and valid keywords
18+ return bool (re .match (r'^[\d\s+\-*/().^sqrt²]+$' , expr ))
19+
20+ def calculate_advanced (expression ):
21+ expression = expression .replace (' ' , '' ) # Remove spaces
22+ if not is_safe_expression (expression ):
23+ return "? Invalid input! Only numbers and basic operators (plus ^, sqrt, ²) are allowed."
24+
25+ try :
26+ safe_expr = preprocess (expression )
27+ result = eval (safe_expr , {"__builtins__" : None , "math" : math })
28+ return f"? Result: { result } "
29+ except Exception as e :
30+ return f"?? Error: { e } "
31+
32+ # Example usage
33+ while True :
34+ user_input = input ("Enter expression (or 'exit' to quit): " )
35+ if user_input .lower () == 'exit' :
36+ break
37+ print (calculate_advanced (user_input ))
0 commit comments