Книга на вашем родном языке 6 2 Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16
Скачать 0.72 Mb.
|
Пример: (сохраните как while.py ) number = 23 running = True while running: guess = int ( input ( 'Введите целое число : ' )) if guess == number: ( 'Поздравляю, вы угадали.' ) running = False # это останавливает цикл while elif guess < number: ( 'Нет, загаданное число немного больше этого.' ) else : ( 'Нет, загаданное число немного меньше этого.' ) else : ( 'Цикл while закончен.' ) # Здесь можете выполнить всё что вам ещё нужно ( 'Завершение.' ) Вывод: $ python while.py Введите целое число : 50 Нет, загаданное число немного меньше этого. Введите целое число : 22 Нет, загаданное число немного больше этого. Введите целое число : 23 Поздравляю, вы угадали. Цикл while закончен. Завершение. Как это работает: В этой программе мы продолжаем играть в игру с угадыванием, но преиму- щество состоит в том, что теперь пользователь может угадывать до тех пор, пока не угадает правильное число, и ему не придётся запускать программу заново для каждой попытки, как это происходило до сих пор. Это наглядно демонстрирует применение оператора while Мы переместили операторы input и if внутрь цикла while и установили 9.2. Оператор while 58 A Byte of Python (Russian), Версия 2.02 переменную running в значение True перед запуском цикла. Прежде всего проверяется, равно ли значение переменной running True , а затем происхо- дит переход к соответствующему while-блоку. После выполнения этого блока команд условие, которым в данном случае является переменная running , про- веряется снова. Если оно истинно, while-блок запускается снова, в противном случае происходит переход к дополнительному else-блоку, а затем – к следу- ющему оператору. Блок else выполняется тогда, когда условие цикла while становится ложным ( False ) – это может случиться даже при самой первой проверке условия. Если у цикла while имеется дополнительный блок else , он всегда выполняется, если только цикл не будет прерван оператором break True и False называются булевым типом данных, и вы можете считать их эквивалент- ными значениям 1 и 0 соответственно. Примечание для программистов на C/C++ Помните, что у цикла while может быть блок else 9.3 Цикл for Оператор for..in также является оператором цикла, который осуществляет итерацию по последовательности объектов, т.е. проходит через каждый элемент в последовательности. Мы узнаем больше о последовательностях в дальнейших главах, а пока просто запомните, что последовательность – это упорядоченный набор элементов. Пример: (сохраните как for.py ) for i in range ( 1 , 5 ): (i) else : ( 'Цикл for закончен' ) Вывод: $ python for.py 1 2 3 4 Цикл for закончен 9.3. Цикл for 59 A Byte of Python (Russian), Версия 2.02 Как это работает: В этой программе мы выводим на экран последовательность чисел. Мы гене- рируем эту последовательность, используя встроенную функцию range 5 Мы задаём два числа, и range возвращает последовательность чисел от перво- го числа до второго. Например, range(1,5) даёт последовательность [1, 2, 3, 4] . По умолчанию range принимает значение шага, равное 1. Если мы зададим также и третье число range , оно будет служить шагом. Например, range(1,5,2) даст [1,3] . Помните, интервал простирается только до второ- го числа, т.е. не включает его в себя. Обратите внимание, что range() генерирует последовательность чисел, но только по одному числу за раз – когда оператор for запрашивает следую- щий элемент. Чтобы увидеть всю последовательность чисел сразу, используй- те list(range()) . Списки 6 подробно рассматриваются в главе Структуры данных Затем цикл for осуществляет итерацию по этому диапазону - for i in range(1,5) эквивалентно for i in [1, 2, 3, 4] , что напоминает при- сваивание переменной i по одному числу (или объекту) за раз, выполняя блок команд для каждого значения i . В данном случае в блоке команд мы просто выводим значение на экран. Помните, что блок else не обязателен. Если он присутствует, он всегда выполняется один раз после окончания цикла for , если только не указан оператор break Помните также, что цикл for..in работает для любой последовательности. В нашем слу- чае это список чисел, сгенерированный встроенной функцией range , но в общем случае можно использовать любую последовательность любых объектов! В следующих разделах мы познакомимся с этим поближе. Примечание для программистов на C/C++/Java/C# Цикл for в Python радикально отличается от цикла for в C/C++. Программисты на C# заметят, что цикл for в Python похож на цикл foreach в C#. Программистам на Java это может напомнить конструкцию for (int i : IntArray) в Java 1.5. Если в C/C++ записать for (int i = 0; i < 5; i++) , то в Python этому соответство- вало бы выражение for i in range(0,5) . Как видно, в Python цикл for проще, более выразителен и менее подвержен ошибкам. 5 range – англ. «диапазон», «интервал» (прим.перев.) 6 list – англ. «список» (прим.перев.) 9.3. Цикл for 60 A Byte of Python (Russian), Версия 2.02 9.4 Оператор break Оператор break служит для прерывания 7 цикла, т.е. остановки выполнения команд даже если условие выполнения цикла ещё не приняло значения False или последователь- ность элементов не закончилась. Важно отметить, что если циклы for или while прервать оператором break, соответству- ющие им блоки else выполняться не будут. Пример: (сохраните как break.py ) while True : s = input ( 'Введите что-нибудь : ' ) if s == 'выход' : break ( 'Длина строки:' , len (s)) ( 'Завершение' ) Вывод: $ python break.py Введите что-нибудь : Программировать весело. Длина строки: 23 Введите что-нибудь : Если работа скучна, Длина строки: 19 Введите что-нибудь : Чтобы придать ей весёлый тон - Длина строки: 30 Введите что-нибудь : используй Python! Длина строки: 23 Введите что-нибудь : выход Завершение Как это работает: В этой программе мы многократно считываем пользовательский ввод и выво- дим на экран длину каждой введённой строки. Для остановки программы мы вводим специальное условие, проверяющее, совпадает ли пользовательский ввод со строкой 'выход' . Мы останавливаем программу прерыванием цикла оператором break и достигаем её конца. Длина введённой строки может быть найдена при помощи встроенной функ- ции len Помните также, что оператор break может применяться и в цикле for 7 break – англ. «разбивать», «разрывать» (прим.перев.) 9.4. Оператор break 61 A Byte of Python (Russian), Версия 2.02 9.4.1 Поэтический Python Swaroop’а Для ввода строк здесь я использовал мини-стишок, который сам сочинил. Он называется Поэтический Python Swaroop’а 8 Программировать весело. Если работа скучна, Чтобы придать ей весёлый тон - используй Python! 9.5 Оператор continue Оператор continue используется для указания Python, что необходимо пропустить все оставшиеся команды в текущем блоке цикла и продолжить 9 со следующей итерации цик- ла. Пример: (сохраните как continue.py ) while True : s = input ( 'Введите что-нибудь : ' ) if s == 'выход' : break if len (s) < 3 : ( 'Слишком мало' ) continue ( 'Введённая строка достаточной длины' ) # Разные другие действия здесь... Вывод: $ python continue.py Введите что-нибудь : a Слишком мало Введите что-нибудь : 12 Слишком мало Введите что-нибудь : абв Введённая строка достаточной длины Введите что-нибудь : выход 8 Swaroop’s Poetic Python: Programming is fun. When the work is done, if you wanna make your work also fun: use Python! 9 continue – англ. «продолжать» (прим.перев.) 9.5. Оператор continue 62 A Byte of Python (Russian), Версия 2.02 Как это работает: В этой программе мы запрашиваем ввод со стороны пользователя, но обраба- тываем введённую строку только если она имеет длину хотя бы в 3 символа. Итак, мы используем встроенную функцию len для получения длины строки, и если длина менее 3, мы пропускаем остальные действия в блоке при помо- щи оператора continue . В противном случае все остальные команды в цикле выполняются, производя любые манипуляции, которые нам нужны. Заметьте, что оператор continue также работает и с циклом for 9.6 Резюме Мы увидели, как использовать три оператора для управления потоком команд: if , while и for , а также связанные с ними операторы break и continue . Это наиболее часто ис- пользуемые конструкции Python, поэтому овладеть ими очень важно. Далее мы увидим, как создавать и использовать функции. 9.6. Резюме 63 Функции Функции – это многократно используемые фрагменты программы. Они позволяют дать имя определённому блоку команд с тем, чтобы впоследствии запускать этот блок по ука- занному имени в любом месте программы и сколь угодно много раз. Это называется вы- зовом функции. Мы уже использовали много встроенных функций, как то len и range Функция – это, пожалуй, наиболее важный строительный блок любой нетривиальной про- граммы (на любом языке программирования), поэтому в этой главе мы рассмотрим раз- личные аспекты функций. Функции определяются при помощи зарезервированного слова def . После этого слова указывается имя функции, за которым следует пара скобок, в которых можно указать имена некоторых переменных, и заключительное двоеточие в конце строки. Далее сле- дует блок команд, составляющих функцию. На примере можно видеть, что на самом деле это очень просто: Пример: (сохраните как function1.py ) def sayHello (): ( 'Привет, Мир!' ) # блок, принадлежащий функции # Конец функции sayHello() # вызов функции sayHello() # ещё один вызов функции Вывод: $ python function1.py Привет, Мир! Привет, Мир! Как это работает: Мы определили функцию с именем sayHello , используя описанный выше синтаксис. Эта функция не принимает параметров, поэтому в скобках не объ- явлены какие-либо переменные. Параметры функции – это некие входные данные, которые мы можем передать функции, чтобы получить соответству- ющий им результат. 64 A Byte of Python (Russian), Версия 2.02 Обратите внимание, что мы можем вызывать одну и ту же функцию много раз, а значит нет необходимости писать один и тот же код снова и снова. 10.1 Параметры функций Функции могут принимать параметры, т.е. некоторые значения, передаваемые функции для того, чтобы она что-либо сделала с ними. Эти параметры похожи на переменные, за исключением того, что значение этих переменных указывается при вызове функции, и во время работы функции им уже присвоены их значения. Параметры указываются в скобках при объявлении функции и разделяются запятыми. Аналогично мы передаём значения, когда вызываем функцию. Обратите внимание на терминологию: имена, указанные в объявлении функции, называются параметрами, то- гда как значения, которые вы передаёте в функцию при её вызове, – аргументами. Пример: (сохраните как func_param.py ) def printMax (a, b): if a > b: (a, 'максимально' ) elif a == b: (a, 'равно' , b) else : (b, 'максимально' ) printMax( 3 , 4 ) # прямая передача значений x = 5 y = 7 printMax(x, y) # передача переменных в качестве аргументов Вывод: $ python func_param.py 4 максимально 7 максимально Как это работает: Здесь мы определили функцию с именем printMax , которая использует два параметра с именами a и b . Мы находим наибольшее число с применением простого оператора if..else и выводим это число. При первом вызове функции printMax мы напрямую передаём числа в ка- честве аргументов. Во втором случае мы вызываем функцию с переменными 10.1. Параметры функций 65 A Byte of Python (Russian), Версия 2.02 в качестве аргументов. printMax(x, y) назначает значение аргумента x па- раметру a , а значение аргумента y – параметру b . В обоих случаях функция printMax работает одинаково. 10.2 Локальные переменные При объявлении переменных внутри определения функции, они никоим образом не свя- заны с другими переменными с таким же именем за пределами функции – т.е. имена переменных являются локальными в функции. Это называется областью видимости пере- менной. Область видимости всех переменных ограничена блоком, в котором они объяв- лены, начиная с точки объявления имени. Пример: (сохраните как func_local.py ) x = 50 def func (x): ( 'x равен' , x) x = 2 ( 'Замена локального x на' , x) func(x) ( 'x по-прежнему' , x) Вывод: $ python func_local.py x равен 50 Замена локального x на 2 x по-прежнему 50 Как это работает: При первом выводе значения, присвоенного имени x , в первой строке функции Python использует значение параметра, объявленного в основном блоке, выше определения функции. Далее мы назначаем x значение 2 . Имя x локально для нашей функции. По- этому когда мы заменяем значение x в функции, x , объявленный в основном блоке, остаётся незатронутым. Последним вызовом функции print мы выводим значение x , указанное в ос- новном блоке, подтверждая таким образом, что оно не изменилось при ло- кальном присваивании значения в ранее вызванной функции. 10.2. Локальные переменные 66 A Byte of Python (Russian), Версия 2.02 10.3 Зарезервированное слово «global» Чтобы присвоить некоторое значение переменной, определённой на высшем уровне про- граммы (т.е. не в какой-либо области видимости, как то функции или классы), необходимо указать Python, что её имя не локально, а глобально (global). Сделаем это при помощи заре- зервированного слова global . Без применения зарезервированного слова global невоз- можно присвоить значение переменной, определённой за пределами функции. Можно использовать уже существующие значения переменных, определённых за преде- лами функции (при условии, что внутри функции не было объявлено переменной с таким же именем). Однако, это не приветствуется, и его следует избегать, поскольку человеку, читающему текст программы, будет непонятно, где находится объявление переменной. Использование зарезервированного слова global достаточно ясно показывает, что пере- менная объявлена в самом внешнем блоке. Пример: (сохраните как func_global.py ) x = 50 def func (): global x print ( 'x равно' , x) x = 2 ( 'Заменяем глобальное значение x на' , x) func() ( 'Значение x составляет' , x) Вывод: $ python func_global.py x равно 50 Заменяем глобальное значение x на 2 Значение x составляет 2 Как это работает: Зарезервированное слово global используется для того, чтобы объявить, что x – это глобальная переменная, а значит, когда мы присваиваем значение име- ни x внутри функции, это изменение отразится на значении переменной x в основном блоке программы. Используя одно зарезервированное слово global , можно объявить сразу несколько переменных: global x, y, z 10.3. Зарезервированное слово «global» 67 A Byte of Python (Russian), Версия 2.02 10.4 Зарезервированное слово «nonlocal» Мы увидели, как получать доступ к переменным в локальной и глобальной области ви- димости. Есть ещё один тип области видимости, называемый «нелокальной» ( nonlocal ) областью видимости, который представляет собой нечто среднее между первыми дву- мя. Нелокальные области видимости встречаются, когда вы определяете функции внутри функций. Поскольку в Python всё является выполнимым кодом, вы можете определять функции где угодно. Давайте рассмотрим пример: # Filename: func_nonlocal.py def func_outer (): x = 2 ( 'x равно' , x) def func_inner (): nonlocal x x = 5 func_inner() ( 'Локальное x сменилось на' , x) func_outer() Вывод: $ python func_nonlocal.py x равно 2 Локальное x сменилось на 5 Как это работает: Когда мы находимся внутри func_inner , переменная x , определённая в пер- вой строке func_outer находится ни в локальной области видимости (опре- деление переменной не входит в блок func_inner ), ни в глобальной обла- сти видимости (она также и не в основном блоке программы). Мы объявля- ем, что хотим использовать именно эту переменную x , следующим образом: nonlocal x Попробуйте заменить « nonlocal x » на « global x », а затем удалить это за- резервированное слово, и пронаблюдайте за разницей между этими двумя случаями. 10.4. Зарезервированное слово «nonlocal» 68 A Byte of Python (Russian), Версия 2.02 10.5 Значения аргументов по умолчанию Зачастую часть параметров функций могут быть необязательными, и для них будут ис- пользоваться некоторые заданные значения по умолчанию, если пользователь не укажет собственных. Этого можно достичь с помощью значений аргументов по умолчанию. Их можно указать, добавив к имени параметра в определении функции оператор присваи- вания ( = ) с последующим значением. Обратите внимание, что значение по умолчанию должно быть константой. Или точнее говоря, оно должно быть неизменным 1 – это объясняется подробнее в последующих гла- вах. А пока запомните это. |