# 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.

  • palmtrees2309@lemm.ee
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    1
    ·
    edit-2
    5 hours ago

    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()