Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 85
Текст из файла (страница 85)
В данную версию сценариятакже было добавлено сообщение, которое выводится в момент завершенияработы сценария. Поскольку инструкция print в последней строке не имеет такого же отступа, как инструкции вложенного блока, она не считается частьютела цикла и будет выполняться только один раз – после выхода из цикла:Enter text:24Короткий пример: интерактивные циклы337Enter text:401600Enter text:stopByeНебольшое примечание: я предполагаю, что этот фрагмент был сохраненв файле сценария и запускается из него.
Если вы вводите этот программныйкод в интерактивном сеансе, не забудьте добавить пустую строку (то есть нажать клавишу Enter дважды) перед заключительной инструкцией print, чтобызавершить тело цикла. Впрочем, нет никакого смысла вводить последнюю инструкцию print в интерактивном сеансе (вы будете вводить ее уже после того,как завершите ввод чисел в цикле!).Обработка ошибок проверкой вводаПока все идет хорошо, но посмотрите, что произойдет, если пользователь введет неверную строку:Enter text:xxx...текст сообщения об ошибке опущен...ValueError: invalid literal for int() with base 10: ‘xxx’Встроенная функция int возбуждает исключение, когда сталкивается с ошибкой. Если нам необходимо обеспечить устойчивость сценария, мы должныпредварительно проверить содержимое строки с помощью строкового методаisdigit:>>> S = ‘123’>>> T = ‘xxx’>>> S.isdigit(), T.isdigit()(True, False)Для этого в наш пример необходимо добавить вложенные операторы.
В следующей версии нашего интерактивного сценария используется полная версияусловной инструкции if, с помощью которой предотвращается возможностьпоявления исключений:while True:reply = input(‘Enter text:’)if reply == ‘stop’:breakelif not reply.isdigit( ):print(‘Bad!’ * 8)else:print(int(reply) ** 2)print ‘Bye’Более подробно мы будем рассматривать инструкцию if в главе 12. Это оченьпростой инструмент программирования логики выполнения сценария. В своейполной форме инструкция содержит слово if, за которым следуют выражениепроверки условия и вложенный блок кода, один или более необязательныхпроверок elif (“else if”) и соответствующих им вложенных блоков кода и необязательная часть else со связанным с ней блоком кода, который выполняетсяпри несоблюдении условия.
Интерпретатор выполняет первый блок кода, длякоторого проверка дает в результате истину, проходя инструкцию сверху вниз,либо часть else, если все проверки дали в результате ложь.338Глава 10. Введение в инструкции языка PythonЧасти if, elif и else в предыдущем примере принадлежат одной и той же инструкции, так как вертикально они расположены на одной линии (то есть имеют одинаковые отступы).
Инструкция if простирается до начала инструкцииprint в последней строке. В свою очередь, весь блок инструкции if являетсячастью цикла while, потому что вся она смещена вправо относительно основнойинструкции цикла. Вложение инструкций станет для вас естественным, кактолько вы приобретете соответствующие навыки.Теперь новый сценарий будет обнаруживать ошибки прежде, чем они будут обнаружены интерпретатором, и выводить (возможно, глупое) сообщение:Enter text:525Enter text:xyzBad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!Enter text:10100Enter text:stopОбработка ошибок с помощью инструкции tryПредыдущее решение работает, но, как будет показано далее в книге, в языке Python существует более универсальный способ, который состоит в том,чтобы перехватывать и обрабатывать ошибки с помощью инструкции try.
Этаинструкция подробно будет рассматриваться в последней части книги, но, использовав инструкцию try в качестве предварительного знакомства, мы можемупростить программный код предыдущей версии сценария:while True:reply = input(‘Enter text:’)if reply == ‘stop’: breaktry:num = int(reply)except:print(‘Bad!’ * 8)else:print(int(reply) ** 2)print ‘Bye’Эта версия работает точно так же, как и предыдущая, только здесь мы заменили явную проверку наличия ошибки программным кодом, который предполагает, что преобразование будет выполнено и выполняет обработку исключения,если такое преобразование невозможно.
Эта инструкция try состоит из словаtry, вслед за которым следует основной блок кода (действие, которые мы пытаемся выполнить), с последующей частью except, где располагается программный код обработки исключения. Далее следует часть else, программный кодкоторой выполняется, если в части try исключение не возникло. Интерпретатор сначала выполняет часть try, затем выполняет либо часть except (если возникло исключение), либо часть else (если исключение не возникло).В терминах вложенности инструкций, так как слова try, except и else имеютодинаковые отступы, все они считаются частью одной и той же инструкцииtry.
Обратите внимание, что в данном случае часть else связана с инструкциейtry, а не с условной инструкцией if. Как будет показано далее в книге, ключе-Короткий пример: интерактивные циклы339вое слово else в языке Python может появляться не только в инструкции if,но и в инструкции try и в циклах – величина отступа наглядно показывает,частью какой инструкции оно является. В данном случае инструкция try начинается со слова try и продолжается до конца вложенного блока кода, следующего за словом else, потому что else располагается на том же расстоянииот левого края, что и try. Инструкция if в этом примере занимает всего однустроку и завершается сразу же за словом break.Напомню, что к инструкции try мы еще вернемся далее в этой книге.
А покавам достаточно будет знать, что эта инструкция может использоваться дляперехвата любых ошибок, уменьшения объема программного кода, проверяющего наличие ошибок, и представляет собой достаточно универсальный подход к обработке необычных ситуаций. Если бы нам, к примеру, потребовалосьобеспечить поддержку ввода не целых, а вещественных чисел, использованиеинструкции try существенно упростило бы реализацию по сравнению с проверкой – нам достаточно было бы просто вызвать функцию float и перехватитьисключение вместо того, чтобы пытаться анализировать все возможные способы записи вещественных чисел.Три уровня вложенности программного кодаТеперь рассмотрим последнюю версию сценария.
В случае необходимости мымогли бы создать еще один уровень вложенности, например, чтобы выполнитьпроверку правильности ввода, основываясь на величине введенного числа:while True:reply = input(‘Enter text:’)if reply == ‘stop’:breakelif not reply.isdigit():print(‘Bad!’ * 8)else:num = int(reply)if num < 20:print(‘low’)else:print(num ** 2)print(‘Bye’)В эту версию сценария добавлена еще одна инструкция if, вложенная в выражение else другой условной инструкции if, которая в свою очередь вложенав цикл while. Когда код выполняется по некоторому условию или в цикле, какв данном случае, достаточно просто выполнить дополнительный отступ вправо. В результате сценарий работает так же, как и предыдущая версия, но длячисел меньше 20 выводит слово «low» (низкое значение):Enter text:19lowEnter text:20400Enter text:spamBad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!Enter text:stopBye340Глава 10.
Введение в инструкции языка PythonВ заключениеВ этой главе мы коротко познакомились с синтаксисом инструкций языка Py���thon. Здесь были представлены основные правила записи инструкций и блоковпрограммного кода. Как было сказано, в языке Python обычно в каждой строкепрограммы располагается единственная инструкция и все инструкции в одноми том же блоке имеют одинаковые отступы (отступы являются частью синтаксиса языка Python). Кроме того, мы рассмотрели несколько исключений изэтих правил, включая многострочные инструкции, однострочные условныеинструкции и циклы. Наконец мы воплотили эти идеи в интерактивный сценарий, в котором продемонстрировали ряд полезных инструкций, а также рассмотрели синтаксис инструкций в действии.В следующей главе мы приступим к глубокому изучению основных процедурных инструкций языка �����������������������������������������������������Python�����������������������������������������������.
Как будет показано далее, все инструкции следуют тем же основным правилам, которые были представлены здесь.Закрепление пройденногоКонтрольные вопросы1. Какие три синтаксических элемента, обязательные в языках, подобныхязыку C, опущены в языке Python?2. Каким образом обычно завершаются инструкции в языке Python?3. Как обычно определяется принадлежность инструкций к вложенному блоку в языке Python?4.
Как можно разместить одну инструкцию в нескольких строках?5. Как можно разместить составную инструкцию в одной строке?6. Существуют ли какие-либо объективные причины для завершения инструкций точкой с запятой?7. Для чего предназначена инструкция try?8. Какую наиболее распространенную ошибку допускают начинающие программисты на языке Python?Ответы1. Обязательными синтаксическими элементами в С-подобных языках программирования являются круглые скобки, окружающие выражения проверки условий в некоторых инструкциях, точка с запятой, завершающаякаждую инструкцию, и фигурные скобки, окружающие вложенные блокипрограммного кода.2.
Конец строки является концом инструкции, расположенной в этой строке.Если в одной строке располагается несколько инструкций, они должны завершаться точками с запятой. Если инструкция располагается в нескольких строках, она должна завершаться закрывающей скобкой.3. Все инструкции во вложенном блоке имеют одинаковые отступы, состоящие из одинакового числа символов пробела или табуляции.4. Инструкция может располагаться в нескольких строках, если заключитьее в пару круглых, квадратных или фигурных скобок. Инструкция закан-Закрепление пройденного341чивается в строке, где интерпретатор Python встречает закрывающую парную скобку.5. Тело составной инструкции может располагаться в той же строке, чтои основная инструкция, сразу после символа двоеточия, но при условии,что тело не содержит других составных инструкций.6. Только когда возникает потребность разместить несколько инструкцийв одной строке, при условии, что ни одна из инструкций не является составной.