Else & elif не работает в Python

Я новичок в Python и в настоящее время изучаю команды Control Flow, такие как if, else и т.д.

Оператор if работает отлично, но когда я пишу команды else или elif, интерпретатор дает мне синтаксическую ошибку. Я использую Python 3.2.1, и проблема возникает как в его родном интерпретаторе, так и в IDLE.

Я следую, как это указано в книге 'Byte Of Python'. Как вы можете видеть, elif и else предоставляют недействительный синтаксис.

>> number=23
>> guess = input('Enter a number : ')
>> if guess == number:
>>    print('Congratulations! You guessed it.')
>> elif guess < number:
   **( It is giving me 'Invalid Syntax')**
>> else:
   **( It is also giving me 'Invalid syntax')**

Почему это происходит? Я получаю проблему как в IDLE, так и в интерактивном питоне. Я надеюсь, что синтаксис прав.

enter image description here

Ответы

Ответ 1

Похоже, вы вводите пустую строку после тела оператора if. Это ключевой для интерактивного компилятора, который вы делаете с блоком целиком, поэтому он не ожидает никаких блоков elif/else. Попробуйте ввести код точно так же и нажмите только один раз после каждой строки:

if guess == number:
    print('Congratulations! You guessed it.')
elif guess < number:
    pass # Your code here
else:
    pass # Your code here

Ответ 2

Проблема заключается в пустой строке, которую вы вводите перед else или elif. Обратите внимание на подсказку, которую вы даете. Если это >>>, то Python ожидает начало нового оператора. Если это ..., то он ожидает, что вы продолжите предыдущее утверждение.

Ответ 3

elif и else должны немедленно следовать за концом блока if, или Python будет считать, что блок закрыт без них.

if 1:
    pass
             <--- this line must be indented at the same level as the `pass`
else:
    pass

В вашем коде интерпретатор завершает блок if при отступе, поэтому elif и else не связаны с ним. Таким образом, они понимаются как автономные утверждения, что не имеет смысла.


В общем, попробуйте следовать правилам , которые включают удаление лишних пробелов.

Ответ 4

В IDLE и интерактивном питоне вы ввели два последовательных CRLF, которые выведут вас из оператора if. Это проблема IDLE или интерактивного python. Это будет нормально, когда вы используете какой-либо редактор, просто убедитесь, что ваш отступ прав.

Ответ 5

 if guess == number:
     print ("Good")
 elif guess == 2:
     print ("Bad")
 else:
     print ("Also bad")

Убедитесь, что ваша идентификация правильная. Синтаксис в порядке.

Ответ 6

Помните, что по умолчанию возвращаемое значение из ввода будет строкой, а не целым числом. Вы не можете сравнивать строки с булерами типа <, > , = > , <= (если вы не сравниваете длину). Поэтому ваш код должен выглядеть так:

number = 23
guess = int(input('Enter a number: '))  # The var guess will be an integer

if guess == number:
    print('Congratulations! You guessed it.')

elif guess != number:
    print('Wrong Number')

Ответ 7

Кроме того, ваше отступление неверно. Код не работает. Я знаю, что вы используете python 3. что-то. Я использую python 2.7.3 код, который действительно будет работать для того, что вы пытаетесь выполнить, - это.

number = str(23)
guess =  input('Enter a number: ')
if guess == number:
   print('Congratulations! You guessed it.')
elif guess < number:
     print('Wrong Number')
elif guess < number:
     print("Wrong Number')

Единственное различие, которое я сказал бы python, это число символов для кода для работы. Если не собираешься думать, это Integer. Когда кто-то запускает код, они вводят строку, а не целое число. Существует много способов изменить этот код, но это простое решение, которое я хотел бы предоставить, есть другой способ, о котором я не могу думать, не превращая 23 в строку. Или вы могли бы "23" поставить цитаты, или вы могли бы использовать функцию int() на входе. которые преобразуют все, что они вводят, и целое число.

Ответ 8

Python может генерировать ту же ошибку "недопустимого синтаксиса", даже если идентификатор для блока "elif" не соответствует "if" block ident (вкладки для первого, пробелы для второго или наоборот).

Ответ 9

отступы важны для того, чтобы стать синтаксически правильными в Python, и ваш оператор if else должен быть в >>>, в Mac Python IDLE версии 3.7.4 оператор elif не имеет правильного отступа, когда вы переходите на следующую строку, вам нужно сместиться влево на избежать синтаксической ошибки.

enter image description here