Главная страница

Книга на вашем родном языке 6 2 Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16


Скачать 0.72 Mb.
НазваниеКнига на вашем родном языке 6 2 Переводы 7 1 Доступные переводы переводы 7 3 Предисловие 16
Дата16.04.2023
Размер0.72 Mb.
Формат файлаpdf
Имя файлаAByteofPythonRussian-2.02.pdf
ТипКнига
#1065836
страница5 из 14
1   2   3   4   5   6   7   8   9   ...   14
Пример: (сохраните как while.py
)
number
=
23
running
=
True
while
running:
guess
=
int
(
input
(
'Введите целое число : '
))
if
guess
==
number:
print
(
'Поздравляю, вы угадали.'
)
running
=
False
# это останавливает цикл while
elif
guess
<
number:
print
(
'Нет, загаданное число немного больше этого.'
)
else
:
print
(
'Нет, загаданное число немного меньше этого.'
)
else
:
print
(
'Цикл while закончен.'
)
# Здесь можете выполнить всё что вам ещё нужно
print
(
'Завершение.'
)
Вывод:
$ 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
):
print
(i)
else
:
print
(
'Цикл 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
print
(
'Длина строки:'
,
len
(s))
print
(
'Завершение'
)
Вывод:
$ 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
:
print
(
'Слишком мало'
)
continue
print
(
'Введённая строка достаточной длины'
)
# Разные другие действия здесь...
Вывод:
$ 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
():
print
(
'Привет, Мир!'
)
# блок, принадлежащий функции
# Конец функции
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:
print
(a,
'максимально'
)
elif
a
==
b:
print
(a,
'равно'
, b)
else
:
print
(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):
print
(
'x равен'
, x)
x
=
2
print
(
'Замена локального x на'
, x)
func(x)
print
(
'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
print
(
'Заменяем глобальное значение x на'
, x)
func()
print
(
'Значение 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
print
(
'x равно'
, x)
def
func_inner
():
nonlocal
x x
=
5
func_inner()
print
(
'Локальное 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
– это объясняется подробнее в последующих гла- вах. А пока запомните это.
1   2   3   4   5   6   7   8   9   ...   14


написать администратору сайта