Как сделать else не в функции

Хотел сделать калькулятор на питоне и проверку на то соответствует ли ответ пользователя, и есть такой вопрос, пайтон мне выдает ошибку:

    else:
    ^
SyntaxError: invalid syntax

при коде:

while True:
    
    def code():
        
        print(Back.RED)
        what = input("Что делаем? (+, -, *, /, %, ^): ")
        
        if what != ("+" and "-" and "*" and "/" and "%" and "^"):
            print("Не понял тебя")
        code()
        
    else:
    print(Back.MAGENTA)
    a = float(input("Введите первое число: "))
    print(Back.CYAN)
    b = float(input("Введите второе число: "))
    if what == "+":
        c = a + b

    if what == "-":
        c = a - b

    if what == "*":
        c = a * b

    if what == "/":
        c = a / b

    if what == "%":
        c = a % b

    if what == "^":
        c = a ** b

    print(Back.GREEN)
    print(Style.BRIGHT)
    print("Результат: " + str(c))

    input()

объясните пожалуйста что неправильно, сильно не ругайте, это моя вторая программа после hello world

Заранее спасибо за ответ!


Ответы (3 шт):

Автор решения: IPOleksenko

Вы не можите использовать else если до него нету if, потому что else подразумвает что если не if или elif, то else, добавте перед else таб и все что идет дальше через два таба P.S. добавьте после code() таб

→ Ссылка
Автор решения: onlikerop

Советую изучить базовый синтаксис Python. Он отличается от многих других ЯПов строгостью написания отступов - они являются обозначением начала и конца блоков (в других ЯПах обычно для этого используется {}).

Здесь неплохое объяснение

В Вашем случае легче показать на места, где что-то написано правильно, чем указать ошибки, тем не менее:

  1. Условие what != ("+" and "-" and "\*" and "/" and "%" and "^") будет истинно только при what == "^", и по своей структуре неверно. Нельзя вынести what != как общий множитель за скобку. Правильно: what != "+" and what != "-" and what != "*" and what != "/" and what != "%" and what != "^"
  2. В строке 10 происходит рекурсия, а так как выхода из функции нет нигде, она становится бесконечной и непрерывной.
  3. Блок else идёт вообще непонятно (особенно для интерпретатора) где, а главное - для чего и к чему относится

Если приложить фантазию для осмысления сути программы и устранить базовые ошибки, то получится примерно так:

while True:
    
    def code():
        
        what = input("Что делаем? (+, -, *, /, %, ^): ")
        if what != "+" or what != "-" or what != "*" or what != "/" or what != "%" or what != "^":
            print("Не понял тебя")
        
        else:
            a = float(input("Введите первое число: "))
            b = float(input("Введите второе число: "))

            # Здесь Ваша реализация калькулятора в зависимости от значения what
            # ...
            # ...

    code()

Ответ на вопрос в комментариях: В текущей реализации оно так и будет происходить, но можно сделать и по-другому - внести while True в функцию так:

while True:
    what = input("Что делаем? (+, -, \*, /, %, ^): ")
            if what != "+" or what != "-" or what != "\*" or what != "/" or what != "%" or what != "^":
                print("Не понял тебя")
            else:
                break

P.S. И да, как написали ниже, действительно можно условие сделать if what not in ('+-*/%^')

→ Ссылка
Автор решения: Виктор

Так ещё лаконичней:

if what not in ('+-*/%^'):

В примере выше с циклом while будет работать как вы хотите.

→ Ссылка