I want my code to understand a string
as a math expression
, then output me this string
with proper whitespaces.
- At first, I created my variables.
operators = ("+", "-", "*", "/", "%", "**", "//") # Math operators the code is going to identify in the string
oper = "20 *25" # The operation string before being formatted ('oper' stands for 'operation')
new_oper = "" # This is going to be the new operation string (desired output)
it = iter(oper.replace(" ", "")) # Removed all whitespaces from the operation string and made it an iterable
- I used the
next()
method once, just so he could understand this method (inside my loop) as the character that comes right after the character the loop is in.
next(it)
- Then I started my loop to check every single character in the
operation string
(already with no whitespaces).
for x in oper.replace(" ", ""):
try: # This try checks if I'm able to use the next() method. If I'm not, x is the last character in the string.
if x not in operators: # x is a number
if next(it) in operators:
new_oper += f"{x} " # If an operator comes right after a number, this number is printed with a whitespace, so they don't stay next to each other.
else:
new_oper += x
elif x in operators: # x is an operator
if x == "*":
if next(it) == "*":
new_oper += x # If another '*' comes after this '*', then it's a ** operator, so no whitespaces inserted (otherwise, they would be separated)
else:
new_oper += f"{x} "
elif x == "/":
if next(it) == "/":
new_oper += x # Same here: if there are 2 '/' next to each other, it's another operator ('//'), so no whitespaces inserted
else:
new_oper += f"{x} "
else:
new_oper += f"{x} "
except RuntimeError:
new_oper += x # x is the last character in the string, no needs to be formatted (it can't be an operator)
- Finally, after formatting everything, I wanted him to print the new string (
new_oper
).
print(new_oper)
Check out these outputs (different values for oper
):
When
oper = "20 *2"
Output
Traceback (most recent call last):
File "filename", line 12, in <module>
if next(it) in operators:
^^^^^^^^
StopIteration
# Desired output: 20 * 2
When
oper = "20 +2"
Output
20 + 2 # Correct output (just changed the operator comparing to the last one)
When
oper = "10+ 3 *2"
Output
10 + 3*2
# Desired output: 10 + 3 * 2
I'd appreciate any approach for my problem. I'm not a python expert (far away from that), so I also would appreciate any suggestions or even fixes in my code that may not directly help my problem.