- операторы else & elif не работают в Python
- 8 ответов
- Оператор if else в Python
- Оператор if
- Оператор if-else
- Вложенные операторы if и if-else
- Оператор if внутри другого if-оператора
- Оператор if-else внутри условия else
- Оператор if-elif-else
- Python: функция if не работает, если в операторе if два условия
- 3 ответа
- Почему не выполняется условие if в python3?
операторы else & elif не работают в Python
Я новичок в Python и в настоящее время изучаю команды потока управления, такие как if , else , etc.
на if оператор работает нормально, но когда я пишу else или elif команды, интерпретатор дает мне синтаксическую ошибку. Я использую Python 3.2.1, и проблема возникает как в собственном интерпретаторе, так и в IDLE.
Я следую, как это дано в книге ‘Байт Python’ . Как видите, elif и else дают Недопустимый Синтаксис.
почему это происходит? Я получаю проблему как в режиме ожидания, так и в интерактивном python. Надеюсь, синтаксис правильный.
8 ответов
похоже, вы вводите пустую строку после текста if заявление. Это сигнал интерактивному компилятору, что вы полностью закончили с блоком, поэтому он не ожидает никакого elif / else блоки. Попробуйте ввести код точно так же, и только нажмите enter после после каждой строки:
проблема заключается в пустой строке, которую вы вводите перед else или elif . Обратите внимание на подсказку. Если это >>> , тогда Python ожидает начала нового оператора. Если это . , тогда он ожидает, что вы продолжите предыдущее заявление.
elif и else должны тут следуйте за концом if block, или Python предположит, что блок закрылся без них.
в вашем коде интерпретатор заканчивает if блок, когда отступ, так что elif и else не связаны с ним. Таким образом, они понимаются как отдельные утверждения, что не имеет смысла.
в общем, попробуйте следовать стиль рекомендации, которые включают удаление излишних пробелов.
в режиме ожидания и интерактивном python вы ввели два последовательных CRLF, которые выводят вас из оператора if. Это проблема простоя или интерактивного python. Это будет нормально, когда вы используете какой-либо редактор, просто убедитесь, что ваш отступ правильный.
убедитесь, что у вас есть право identation. Синтаксис в порядке.
помните, что по умолчанию возвращаемое значение из входной строки, а не целое число. Вы не можете сравнивать строки с booleans как , =>,
кроме того, что ваш отступ-это неправильно. Код не сработает. Я знаю, что вы используете Python 3. что-то. Я использую python 2.7.3 код, который на самом деле будет работать для того, что вы пытаетесь выполнить, таков.
единственное отличие, которое я бы сказал python, что число-это строка символа для работы кода. Если нет, подумает, что это целое число. Когда кто-то запускает код, он вводит строку, а не целое число. Есть много способов изменить этот код, но это простое решение, которое я хотел предоставить, есть еще один способ, о котором я не могу думать, не превращая 23 в строку. Или вы могли бы» 23 » поставить цитаты или вы могли бы использовать функцию int () во входных данных. это преобразует все, что они вводят, и целое число.
Python может генерировать ту же ошибку «недопустимый синтаксис», даже если идент для блока «elif» не соответствует иденту блока » if » (вкладки для первого, пробелы для второго или наоборот).
Источник
Оператор if else в Python
При изучении программирования в качестве практики часто приходится создавать «идеальные программы», которые в реальном мире работают совсем не так.
Иногда, например, нужно исполнить ряд инструкций только в том случае, если соблюдаются определенные условия. Для обработки таких ситуаций в языках программирования есть операторы управления. В дополнение к управлению потоком выполнения программы эти операторы используются для создания циклов или пропуска инструкций, когда какое-то условие истинно.
Операторы управления бывают следующих типов:
- Оператор-выражение if
- Оператор-выражение if-else
- Оператор-выражение if-elif-else
- Цикл while
- Цикл for
- Оператор-выражение break
- Оператор-выражение continue
В этом уроке речь пойдет о первых трех операторах управления.
Оператор if
Синтаксис оператора if следующий:
Первая строчка оператора, то есть if condition : — это условие if, а condition — это логическое выражение, которое возвращает True или False . В следующей строке блок инструкций. Блок представляет собой одну или больше инструкций. Если он идет следом за условием if, такой блок называют блоком if.
Стоит обратить внимание, что у каждой инструкции в блоке if одинаковый отступ от слова if. Многие языки, такие как C, C++, Java и PHP, используют фигурные скобки ( <> ), чтобы определять начало и конец блока, но в Python используются отступы.
Каждая инструкция должна содержать одинаковое количество пробелов. В противном случае программа вернет синтаксическую ошибку. В документации Python рекомендуется делать отступ на 4 пробела. Такая рекомендация актуальная для и для этого .
Как это работает:
Когда выполняется инструкция if, проверяется условие. Если условие истинно, тогда все инструкции в блоке if выполняются. Но если условие оказывается неверным, тогда все инструкции внутри этого блока пропускаются.
Инструкции следом за условием if, у которых нет отступов, не относятся к блоку if. Например, — это не часть блока if, поэтому она будет выполнена в любом случае.
Стоит обратить внимание, что во втором случае, когда условие не истинно, инструкция внутри блока if пропускается. В этом примере блок if состоит из одной инструкции, но их может быть сколько угодно, главное — делать отступы.
Рассмотрим следующий код:
Здесь важно обратить внимание, что только выражения на строках 3, 4 и 5 относятся к блоку if. Следовательно, они будут исполнены только в том случае, когда условие if будет истинно. Но инструкции на строках 7 и 8 выполнятся в любом случае.
Консоль Python реагирует иначе при использовании операторов управления прямо в ней. Стоит напомнить, что для разбития выражения на несколько строк используется оператор продолжение ( \ ). Но в этом нет необходимости с операторами управления. Интерпретатор Python автоматически активирует мультистрочный режим, если нажать Enter после условия if. Например:
После нажатия Enter на строке с условием if командная строка преобразуется с >>> на … . Консоль Python показывает … для многострочных инструкций. Это значит, что начатая инструкция все еще не закончена.
Чтобы закончить инструкцию if, нужно добавить еще одну инструкцию в блок if:
Python не будет автоматически добавлять отступ. Это нужно сделать самостоятельно. Закончив ввод инструкции, нужно дважды нажать Enter, чтобы исполнить инструкцию. После этого консоль вернется к изначальному состоянию.
Все эти программы заканчиваются внезапно, не показывая ничего, если условие не истинно. Но в большинстве случаев пользователю нужно показать хотя бы что-нибудь. Для этого используется оператор-выражение if-else.
Оператор if-else
Оператор if-else исполняет одну порцию инструкций, если условие истинно и другое — если нет. Таким образом этот оператор предлагает два направления действий. Синтаксис оператора if-else следующий:
Как это работает:
Когда оператор if-else исполняется, условие проверяется, и если оно возвращает True , когда инструкции в блоке if исполняются. Но если возвращается False , тогда исполняются инструкции из блока else.
Пример 1: программа для расчета площади и длины окружности круга.
Теперь программа показывает корректный ответ пользователю, даже если условие if не является истинным. Это и требуется.
В инструкциях if-else нужно следить за тем, чтобы условия if и else находились на одном уровне. В противном случае программа вернет синтаксическую ошибку. Например:
Если попробовать запустить эту программу, то появится следующая ошибка:
Для исправления проблемы нужно вертикально выровнять if и else
Пример 2: программа для проверки пароля, введенного пользователем.
Вложенные операторы if и if-else
Использовать операторы if-else можно внутри других инструкций if или if-else. Это лучше объяснить на примерах:
Оператор if внутри другого if-оператора
Пример 1: программа, проверяющая, имеет ли студент право на кредит.
Здесь оператор if используется внутри другого if-оператора. Внутренним называют вложенный оператором if. В этом случае внутренний оператор if относится к внешнему блоку if, а у внутреннего блока if есть только одна инструкция, которая выводит “Поздравляем, вам выдан кредит”.
Как это работает:
Сначала оценивается внешнее условие if, то есть per_grad > 70 . Если оно возвращает True , тогда управление программой происходит внутри внешнего блока if. Там же проверяется условие gre_score > 150 . Если оно возвращает True , тогда в консоль выводится «Congratulations you are eligible for loan» . Если False , тогда программа выходит из инструкции if-else, чтобы исполнить следующие операции. Ничего при этом не выводится в консоль.
При этом если внешнее условие возвращает False , тогда выполнение инструкций внутри блока if пропускается, и контроль переходит к блоку else (9 строчка).
У этой программы есть одна маленькая проблема. Запустите ее заново и введите gre_score меньше чем 150 , а per_grade — больше 70 :
Программа не выводит ничего. Причина в том, что у вложенного оператора if нет условия else. Добавим его в следующем примере.
Пример 2: инструкция if-else внутри другого оператора if.
Как это работает:
Эта программа работает та же, как и предыдущая. Единственное отличие — у вложенного оператора if теперь есть инструкция else. Теперь если ввести балл GRE меньше, чем 150, программа выведет: “У вас низкий кредитный лимит”
При создании вложенных операторов if или if-else, всегда важно помнить об отступах. В противном случае выйдет синтаксическая ошибка.
Оператор if-else внутри условия else
Пример 3: программа для определения оценки студента на основе введенных баллов.
Как это работает:
Когда управление программой переходит к оператору if-else, проверяется условие на строке 3 ( score >= 90 ). Если оно возвращает True , в консоль выводится “Отлично! Ваша оценка А”. Если значение неверное, управление переходит к условию else на 5 строке. Теперь проверяется условие score >= 80 (6 строка). Если оно верное, тогда в консоли выводится “Здорово! Ваша оценка — B”.
В противном случае управление программой переходит к условию else на 8 строке. И здесь снова имеется вложенный оператор if-else. Проверяется условие ( score >= 70 ). Если оно истинно, тогда в консоль выводится “Хорошо! Ваша оценка — C”. В противном случае управление переходит к блоку else на 11 строке. В конце концов, проверяется условие ( score >= 60 ). Если оно возвращает True , тогда в консоль выводится “Ваша оценка — D. Стоит повторить материал.” Если же False , тогда в консоли будет “Вы не сдали экзамен”. На этом этапе управление переходит к следующим инструкциям, написанным после внешнего if-else.
Хотя вложенные операторы if-else позволяют проверять несколько условий, их довольно сложно читать и писать. Эти же программы можно сделать более читабельными и простыми с помощью if-elif-else.
Оператор if-elif-else
Оператор if-elif-else — это альтернативное представление оператора if-else, которое позволяет проверять несколько условий, вместо того чтобы писать вложенные if-else. Синтаксис этого оператора следующий:
Примечание: … означает, что можно писать сколько угодно условий eilf .
Как это работает:
Когда исполняется инструкция if-elif-else, в первую очередь проверяется condition_1 . Если условие истинно, тогда исполняется блок инструкций if. Следующие условия и инструкции пропускаются, и управление переходит к операторам вне if-elif-else.
Если condition_1 оказывается ложным, тогда управление переходит к следующему условию elif , и проверяется condition_2 . Если оно истинно, тогда исполняются инструкции внутри первого блока elif . Последующие инструкции внутри этого блока пропускаются.
Этот процесс повторяется, пока не находится условие elif , которое оказывается истинным. Если такого нет, тогда исполняется блок else в самом конце.
Перепишем программу с помощью if-elif-else.
Источник
Python: функция if не работает, если в операторе if два условия
Я работаю с Python 3.6, и я написал это:
. и вывод НИЧЕГО! NADA ! Ни «привет», ни «привет 2», даже не ошибка!
Даже если я сделаю это:
Еще ничего! Почему?
Изменить: Я извиняюсь всех, до этого я не заметил, что «else» не имеет двоеточия, поэтому для некоторых они получили ошибку синтаксиса, возможно, она исправлена сейчас, но она по-прежнему ничего не выводит
Редактировать 2: это будет неудобно, так как я использовал PyCharm и мой другой файл открыт (в этом файле не выполняется ни одна функция), я случайно запустил другой файл, а не этот файл «zen», поэтому я ничего не получил, потому что это. Я на самом деле получил SyntaxError из этого файла «zen», и этот пост действительно помог мне решить эту проблему, хотя я и заявил, что это не проблема, и напомнил себе, что нужно проверять все перед тем, как что-либо делать, так что да, спасибо всем, кто помог мне 🙂
3 ответа
Я предполагаю, что это то, что вы хотели достичь:
Как отмечается в некоторых комментариях, если кто-то пытается запустить ваш код, он возвращает следующее (в Linux GCC 4.8.2 / Python 3.6.1):
Если вы хотите изменить значение, напечатанное после первой оценки условия, перепишите его следующим образом:
Решение 1. Передайте аргументы в функцию.
Решение 2. Объявите «zen» и «zen2» как глобальные перед объявлением.
У вас есть логические ошибки. Вы не можете использовать zend2 перед использованием global. Вы должны передать переменные в качестве аргументов или объявить их как глобальные в первой строке функции.
Источник
Почему не выполняется условие if в python3?
Этот скрипт проверяет, есть ли подключение к домену, функция работает, чтение и запись в файл тоже работает, но не могу понять, почему пропускается условие if (check(item) == 1) понять не могу почему он тупо перезаписывает массив не проверив ответ функции check(), мало того, он стирает последний символ на последнем домене и создает пустую строку..
Я сравнил вывод этого скрипта с выводом сервиса https://www.cy-pr.com/tools/masswhois/
Из 8 проверенных доменов скрипт правильно определил 6.
Уже крыша немного едет, так же есть проблема, при проверке домена, не получив ответа(пробовал зайти, бесконечно грузит) он выбивает ошибку:
Помогите пожалуйста отладить код, что бы он правильно сохранял вывод и не прерывался на первых строках списка.. Заранее благодарю!
- Вопрос задан 11 дек. 2020
- 177 просмотров
Посмотреть, какие выдаются исключения :
Это для сокращения. В with open (файл, режим) as .
после as задаётся «псевдоним/alias», под которым программа будет работать с этим файлом, открытом в нужном режиме.
А получается, что псевдоним это check_domains, который уже ранее задан как новое имя файла check_domains = ‘check_’ + sys.argv[1]
Вместо for check_domain in check_domains нужно брать элементы из списка доменов, который передаётся в функцию save_list(file, domain_list) вторым аргументом
и в самом скрипте разве не должен сначала составляться список а потом писаться в файл ? Тут же получается, что список при срабатывании if каждый раз в текущем виде пишется в файл. Теоретически, при последнем шаге файл будет правильным, потому что список к этому временим будет полным, но так нет смысла делать, надо писать после обработки списка.
Источник