# Ask user to enter an expression and display output
def main():
expression = input("Expression: ")
print(calculate(splitter(expression)))
# Split expression into components and assign to variables as float values
def splitter(expression):
x, y, z = expression.split()
return x, y, z
# Calculate expression result
def calculate(x, y, z):
x, z = float(x), float(z)
if y == "+":
return str(round((x + z), 1))
elif y == "-":
return str(round((x - z), 1))
elif y == "*":
return str(round((x * z), 1))
else:
return str(round((x / z), 1))
main()
I am getting traceback errors for any expression (1 + 1) I enter.
After the split x becomes (1 and z becomes 1). They can’t be converted to float. I think that’s why. Let me run the code. Edit - Also as you are returning a, b, c from splitter but Python functions return a single object. The a, b, c turns to a tuple. But you are using js syntax I think. So we have to unwrap inside the calculate function.
Now my original comment is not useful but you can try to introduce a conditional to check of the numbers x and z are actually numbers before converting to floats
# Ask user to enter an expression and display output def main(): expression = input("Expression: ") print(calculate (splitter (expression))) # Split expression into components and assign to variables as float values def splitter (expression): print(expression) x, y, z = expression.split() print(expression.split()) return x, y, z # Calculate expression result # Changes Beginning def calculate(numbers): x,y,z = numbers # Changes End x, z = float(x), float(z) if y == "+": return str(round((x + z), 1)) elif y == "-": return str(round((xz), 1)) elif y == "*": return str(round((x*z), 1)) else: return str(round((x / z), 1)) main()