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