Лутц М. - Изучаем Python (1077325), страница 71
Текст из файла (страница 71)
Ваши коллеги будут благодарны вам за это. Однако вы по-прежнему можете встретить конструкцию на основе комбинации ало/ог в программном коде, написанном до появления версии РуФЬоп 2.5 (и в программном коде, написанном программистами, использовавшими язык С, и не сумевшими избавиться от прошлых привычек). В заключение В этой главе мы познакомились с инструкцией тт языка РуФЬоп.
Так как это была первая составная инструкция на нашем пути, мы попутно рассмотрели общие синтаксические правила языка Район и поближе познакомились с операциями проверки истинности. Кроме того, мы также узнали, как в языке РуФЬоп реализуется множественное ветвление, и изучили форму выражений 1Г/е1ве, которая впервые появилась в версии РуФЬоп 2.5. В следующей главе мы продолжим изучение процедурных инструкций и рассмотрим циклы на11е и Гог. Там будет рассказано об альтернативных способах программирования циклов в языке Ру1)топ, каждый из которых имеет свои преимущества. Но перед этим вас ждут обычные контрольные вопросы главы.
Закрепление пройденного Контрольные вопросы 1. Как в языке РуФ)топ можно оформить множественное ветвление т 2. Как в языке РуФЬоп можно оформить инструкцию 1Г/е1ве в виде выражения т 3. Как можно разместить одну инструкцию в нескольких строках т 329 Закрепление пройденного 4. Что означают слова Тгсе и га1ае7 Ответы 1. Самый простой, хотя и не самый краткий способ организации множественного ветвления заключается в использовании инструкции 1г с несколькими частями е1(г. Нередко того же результата можно добиться с помощью операции индексации в словаре, особенно если учесть, что словари могут содержать функции, созданные с помощью инструкций Ое( или выражений 1ааоса. 2. В версии Ру(Ьоп 2.5 выражение У 1г Х е1ае Е возвращает У, если Х имеет истинное значение, или 2 — в противном случае.
Это выражение эквивалентно инструкции 1( из четырех строк. Комбинация операторов апО/ог ((Х апо 'г') ог 2) может действовать точно так же, но она менее понятна и требует, чтобы часть г' имела истинное значение. 3. Обернув инструкцию синтаксически уместной парой скобок ((), [], или ()), можно расположить ее на нескольких строках — инструкция будет считаться законченной, когда интерпретатор обнаружит правую закрывающую скобку. 4.
Тгсе и га1ае — это всего лишь версии целых чисел 1 и О, соответственно. В языке Ру(поп они обозначают истинные и ложные значения. Циклы ~мЫ!е и аког В этой главе мы встретимся с двумя основными конструкциями организации циклов в языке РуФЬоп — инструкциями, которые выполняют одну и ту же последовательность действий снова и снова.
Первая из них, инструкция хЭ11е, обеспечивает способ организации универсальных циклов; вторая, инструкция го~, предназначена для обхода элементов в последовательностях и выполнения блока программного кода для каждого из них. В языке Ру111оп существуют и другие способы организации циклов, но две инструкции, которые описываются здесь, являются основными синтаксическими элементами, предоставляющими возможность программирования повторяющихся действий.
Кроме того, мы попутно рассмотрим необычные инструкции (такие как Сгеэх и сспмсэе), потому что они используются внутри циклов. Дополнительно в этой главе мы исследуем родственные концепции протокола итераций в языке РуФЬоп и рассмотрим некоторые подробности о генераторах списков— близких родственниках цикла гог. Циклы а~Ы!е Инструкция ээ11е является самой универсальной конструкцией организации итераций в языке РуФоп. Проще говоря, она продолжает выполнять блок инструкций (обычно с отступами) до тех пор, пока условное выражение продолжает возвращать истину.
Она называется «цикломе, потому что управление циклически возвращается к началу инструкции, пока условное выражение не вернет ложное значение. Как только в результате проверки будет получено ложное значение, управление будет передано первой инструкции, расположенной сразу же за вложенным блоком тела цикла чЭ11е. В результате тело цикла продолжает выполняться снова и снова, пока условное выражение возвраща- ЗЗ1 Циклы иЬ!е ет истинное выражение, а если условное выражение сразу вернет лож- ное значение, тело цикла никогда не будет выполнено. Общий формат В своей наиболее сложной форме инструкция ил11е состоит из строки заголовка с условным выражением, тела цикла, содержащего одну или более инструкций с отступами, и необязательной части е1ве, которая выполняется, когда управление передается за пределы цикла без использования инструкции Сгеаа.
Интерпретатор продолжает вычислять условное выражение в строке заголовка и выполнять вложенные инструкции в теле цикла, пока условное выражение не вернет ложное значение: ип>1е <тевт>; <втатеаептв<> е1ве; <ыатваепш2> а условное выракение гевг а Тело цикла В Иеобязателвная насты е1ве а Выполняется, если вы<од из цикла производится а не инструкцией Огеая Примеры Для иллюстрации рассмотрим несколько простых циклов ил11е в действии. Первый, который содержит инструкцию рг1пв, вложенную в цикл иП11е, просто выводит сообщение до бесконечности.
Не забывайте, что Тгце — это всего лишь особая версия целого числа 1, и оно обозначает истинное значение, поэтому результатом этого условного выражения всегда будет истина и интерпретатор бесконечно будет выполнять тело цикла, пока вы не прервете его выполнение. Ч'акие циклы обычно называются бесконечными: »> иа11е Тгце; рггж 'Туре С<г1-С Во егор ве! ' Следующий фрагмент продолжает вырезать из строки первый символ, пока она не опустеет и в результате не превратится в ложное значение.
Это обычная практика — проверка истинности объектов осуществляется непосредственно вместо использования более растянутого эквивалента (ил11е к ! = ' ';). Далее в этой главе мы рассмотрим другие способы обхода элементов строки с помощью цикла Тот. Обратите внимание на завершающий символ запятой в инструкции рг(пв — как рассказывалось в главе 11, такой прием обеспечивает вывод значений в одну строку: Как я только что заметил, инструкция илв1е — это одна из двух инструкций циклов в языке РуФЬоп, кроме нее существует еще инструкция Тот.
Помимо этих инструкций в языке Ру$Ьоп существует несколько способов неявной организации циклов (итераций): функции вар, гебцсе и Тт1гег; оператор 1п проверки на вхождение; генераторы списков и многие другие. Некоторые из них мы рассмотрим в главе 17, потому что они имеют отношение к функциям. зз2 Глава13. ЦиклычцЬ))еи1ог »> х = 'зраа' »> вп11е х: рггп1 х, х х(1:) № Пока х не пустая строка № Вврезат» первей символ из к зрав раа аа и Следующий фрагмент перебирает значения от а до Ь, не включая зна- чение Ь.
Ниже мы рассмотрим более простой способ выполнения этих же действий с помощью цикла (о г и встроенной функции гапОО: »> а=с; Ь=10 »> ип11е а < Ь: рг1п1 а, а+=1 № Один из способов организации циклов перечисления №Ог, а=а»1 О 123486789 Наконец, обратите внимание, что в языке Ру1Ьоп отсутствует цикл «до ип111», имеющийся в других языках программирования. Однако его можно имитировать, добавив в конец тела цикла условную инст- рукцию и инструкцию Ьгеауи нл>1е Тгце: ...тело цикла... тт ехтттезт( ): Ьгеак ЬгеаК сопбпое, ран и е!ье Теперь, когда мы познакомились с несколькими циклами в действии, настало время обратить внимание на две простые инструкции, которые могут использоваться только внутри циклов — инструкции ЬгеаК и соп1(псе.
Раз уж мы занялись изучением необычных инструкций, заодно рассмотрим здесь часть е1зе, потому что она некоторым образом связана с инструкцией Ьгеаа, и заодно пустую инструкцию-заполнитель раза. Ьгеах Производит переход за пределы объемлющего цикла (всей инструк- ции цикла). соп11пце Производит переход в начало цикла (в строку заголовка). раза Ничего не делает: это пустая инструкция, используемая как заполнитель. Чтобы окончательно понять, как эта структура работает, нам необходимо перейти к следующему разделу и поближе познакомиться с инстРукцией Ь геаК. ЬгеаК, соп1!псе, раж и ейе Блок е1ае Выполняется, только если цикл завершился обычным образом (без использования инструкции ЬгеаК). ип>1е <тазы>: <згатааептз1> >т <1езт2> Ьгеац >Г <1езте>, сопыпце е1зе: <зсатеаеыз2> № Войти из цикла, пропустил часть а1за № лерайти а на~ало цикла, к аиракенио геагч № Вилолняатся, если не была испол»золяна № инструкция 'Огеая' Инструкции ЬгеаК и сопшпце могут появляться в любом месте внутри тела цикла ио11е (или тот), но как правило, они используются в услов- ных инструкциях 1(, чтобы выполнить необходимое действие в ответ на некоторое условие.
Примеры Обратимся к нескольким простым примерам, чтобы увидеть, как эти инструкции используются на практике. р3$5 Инструкция раза не выполняет никаких действий и используется в случаях, когда синтаксис языка требует наличия инструкции, но никаких полезных действий в этой точке программы выполнить нельзя. Она часто используется в качестве пустого тела составной инструкции. Например, если потребуется создать бесконечный цикл, который ничего не делает, сделать это можно будет следующим образом: № Вааяята СГГ1-С, ЧтОбц ЛрараатЬ ЦИКЛ! иот1е 1: раза Поскольку тело цикла — это всего лишь пустая инструкция, интерпретатор «застрянет» в этом цикле. Грубо говоря, раза в мире инструкций— это то же, что йопе в мире объектов — явное ничто.