Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Язык Python. Учебное пособие
.pdf
if выражение:
инструкция_1
инструкция_2
...
инструкция_n
else:
инструкция_a
инструкция_b
...
инструкция_x
Примеры
a = 3
if a > 2:
print ( "H" )
else:
print ( "L" )
Результат: H
a = 1
if a > 2:
print ( "H" )
else:
print ( "L" )
Результат: L
Условие такого вида можно записать в строчку, в таком случае оно будет
представлять собой тернарное выражение.
a = 17
b = True if a > 10 else False
print (b)
Результат: True
3.1.3. Конструкция if – elif – else
Для реализации выбора из нескольких альтернатив можно использовать
конструкцию if – elif – else. Синтаксис конструкции if – elif – else:
if выражение_1:
блок инструкций 1
elif выражение_2:
блок инструкций 2
elif выражение_3:
блок инструкций 3
else:
блок инструкций 4
41

Пример
a = int(input ("введите число:"))
if a < 0:
print ( "меньше 0" )
elif a == 0:
print ( "равно 0" )
else:
print ( "больше 0" )
Если при выполнении программы ввести число меньше нуля, то будет
выведено “ меньше 0“ , равное нулю – “равно 0“, большее нуля – “больше 0“.
3.2. Оператор цикла while
Оператор цикла while выполняет указанный набор инструкций до тех пор,
пока условие цикла истинно. Истинность условия определяется так же, как и в
операторе if. Синтаксис оператора while:
while выражение:
инструкция_1
инструкция_2
...
инструкция_n
Выполняемый набор инструкций называется телом цикла.
Пример
a = 0
while a < 7 :
print ( "A="+str(a))
a += 1
Результат:
A=1
A=2
A=3
A=4
A=5
A=6
A=7
3.3. Операторы break и continue
При работе с циклами используются операторы break и continue. Оператор break предназначен для досрочного прерывания работы цикла while.
42

Пример
a = 0
while a >= 0:
if a == 7:
break
a += 1
print ( "A" )
В приведенном выше коде, выход из цикла произойдет при достижении
переменной a значения 7. Если бы не было конструкции if, цикл выполнялся
бесконечно.
Оператор continue запускает цикл заново, при этом код, расположенный
после данного оператора, не выполняется.
Пример
a = - 1
while a < 10:
a += 1
if a >= 7:
continue
print ("A")
При запуске данного кода символ “А” будет напечатан 7 раз, несмотря на
то, что всего будет выполнено 11 проходов цикла.
3.4. Оператор цикла for
Оператор for выполняет указанный набор инструкций заданное количество раз, которое определяется количеством элементов в наборе.
Пример
# Измерить несколько слов:
words = ['cat', 'window', 'defenestrate']
for w in words:
print(w, len(w))
Результат
cat 3
window 6
defenestrate 12
Если необходимо изменить последовательность внутри цикла, рекомен-
дуется сначала сделать копию. Выполнение итерации над последовательностью
безоговорочно не создает ее копию. Взятие среза делает это особенно удобным.
43

Пример
for w in words[:]: # Цикл по срезу-копии целого списка
if len(w) > 6:
words.insert(0, w)
print(words)
Результат: defenestrate, cat, window, defenestrate
3.5. Функции range() и list()
Для перебора последовательности чисел используется встроенная функция range(), которая генерирует арифметические прогрессии.
for i in range(5):
print(i)
Результат
0
1
2
3
4
Заданная конечная точка никогда не входит в генерируемую последовательность: range(10) генерирует 10 значений, индексируемые, как обычная
последовательность длинной 10. Возможно установить другое число в качестве
начала диапазона или указать другое приращение (даже отрицательное; иногда
приращение называют "шагом").
Примеры
range(5, 10)
значения от 5 по 9
range(0, 10, 3)
значения от 0 до 9 с шагом 3: 0, 3, 6, 9
range(-10, -100, -30)
значения от -10 до -99 с шагом -30: -10, -40, -70
Для перебора по индексам последовательности можно сочетать функции
range() и len().
a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)): #цикл от 0 до (5-1)
print(i, a[i])
Результат
0 Mary
1 had
2 a
3 little
4 lamb
44

Функций list() предназначена для создания списка из итерируемых (перечисляемых) объектов.
Примеры
list(range(5))
Результат: 0, 1, 2, 3, 4
list(“ABC”)
Результат: A, B, C
3.6. Оператор pass
Оператор pass ничего не делает. Он может быть использован, когда
синтаксически требуется какой-нибудь оператор, но программа не требует
действия.
Пример
while True:
pass # Занят ожиданием прерывания с клавиатуры (Ctrl+C)
4. ФУНКЦИИ
Функции – это многократно используемые фрагменты программы. Они
позволяют дать имя определённому блоку команд с тем, чтобы впоследствии
запускать этот блок по указанному имени в любом месте программы и сколь
угодно много раз. Это называется вызовом функции.
Функция в Python – объект, принимающий аргументы и возвращающий
значение. Функции представляют блок кода, который выполняет определенную
задачу и который можно повторно использовать в других частях программы.
Формальное определение функции:
def имя_функции ([параметры]):
инструкции
Определение функции начинается с выражения def, которое состоит из
имени функции, набора скобок с параметрами и двоеточия. Параметры в скобках необязательны. А со следующей строки идет блок инструкций, которые выполняет функция. Все инструкции функции имеют отступы от начала строки.
Пример
def say_hello(): # Функция с названием say_hello
print("Hello")
# Обращение к функции
say_hello()
say_hello()
say_hello()
say_hello()
45

Результат
Hello
Hello
Hello
Hello
Можно для примера, рассмотреть пример создания функции, которая выводит ряд Фибоначчи до произвольной границы. Числа Фибоначчи – это ряд
чисел, в котором каждое следующее число равно сумме двух предыдущих: 1, 1,
2, 3, 5, 8, 13, ... .
Формула:
F1 = 1
F2 = 1
Fn = F
n-1
+ F
n-2
Пример вычисления:
F3 = F2 + F1 = 1 + 1 = 2
F4 = F3 + F2 = 2 + 1 = 3
F5 = F4 + F3 = 3 + 2 = 5
F6 = F5 + F4 = 5 + 3 = 8
...
def fib(n): # выводит ряд Фибоначчи до n
”””Печатает ряд Фибоначчи вплоть до n”””
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
# Обращение к функции
fib(2000)
Результат
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
Опционально (не обязательно) первое выражение тела функции может
быть строковым литералом; этот строковый литерал является строкой
документации функции, или docstring. Есть инструменты, которые используют
строки документации для автоматического создания онлайн или печатной
документации, или позволить пользователю интерактивно просматривать код.
Выполнение функции вводит новую таблицу обозначений, используемую
для локальных переменных функции. Точнее, все присваивания переменным в
функции сохраняют значение в локальной таблице обозначений; так, ссылки на
переменные сначала ищутся в локальной таблице, затем в локальной таблице
обрамляющих функций, затем в глобальной таблице обозначений и, наконец, в
таблице встроенных имен. Поэтому глобальные переменные не могут быть
46

связаны со значением непосредственно в функции (если не названы в операторе
global), хотя на них можно ссылаться.
Фактические параметры (аргументы) при вызове функции вводятся в ее
локальную таблицу имен; таким образом, аргументы передаются с помощью
вызова по значению (где значение всегда ссылка на объект, не значение
объекта). Когда функция вызывает другую функцию, создается новая
локальная таблица имен для этого вызова.
Определение функции вводит ее имя в текущую таблицу обозначений.
Значение имени функции имеет тип, который распознается интерпретатором
как определенная пользователем функция.
Просто написать функцию, которая возвращает список чисел ряда
Фибоначчи, вместо их вывода.
Пример
def fib2(n): # возвращает ряд Фибоначчи вплоть до n
"""Возвращает список, включающий ряд Фибоначчи вплоть до n."""
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
# Обращение к функции
f100 = fib2(100)
print(f100) # вывод результата
Результат
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
Пример демонстрирует особенности Python:
Оператор return возвращает значение из функции. return без выражения
аргумента возвращает None. Выполнение функции до конца также возвращает None.
Выражение result.append(a) вызывает метод спискового объекта result.
Метод – это функция, которая "принадлежит" объекту и называется obj.methodname, где obj – какой-либо объект (это может быть выражение), а methodname –
имя метода, который определен типом объекта. Различные типы определяют
разные методы. Методы разных типов могут иметь одинаковые имена, при этом
не возникает неоднозначности. Метод append(), показанный в примере, опреде-
лен для списковых объектов; он добавляет новый элемент в конец списка. В
данном примере это эквивалентно result = result + [a], но более эффективно.
47

4.1. Определения функций
Также возможно определять функции с переменным числом аргументов.
Есть три формы, которые могут быть комбинированы.
4.1.1. Значения аргументов по умолчанию
Наиболее полезная форма – указать значение по умолчанию для одного
или более аргументов, что создает функцию, которая может быть вызвана с
меньшим количеством аргументов, чем это определено по умолчанию.
Пример
def ask_ok(prompt, retries=4, reminder='Please try again!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise ValueError('invalid user response')
print(reminder)
Эта функция может быть вызвана несколькими способами:
передачей только обязательного аргумента: ask_ok('Do you really want
to quit?')
передачей одного из необязательных аргументов: ask_ok('OK to
overwrite the file?', 2)
или даже передачей всех аргументов: ask_ok('OK to overwrite the file?',
2, 'Come on, only yes or no!')
Этот пример также знакомит с ключевым словом in, предназначенным
для проверки содержания последовательности определенных значений.
Значение по умолчанию вычисляется только один раз. Это создает
различие, когда по умолчанию задается изменяемый объект, такой как список,
словарь или экземпляры большинства классов.
Пример
# Функция накапливает переданные ей аргументы на последующие вызовы:
def f(a, L=[]):
L.append(a)
return L
# Обращение к функции
print(f(1))
48

print(f(2))
print(f(3))
Результат:
1
1, 2
1, 2, 3
4.1.2. Аргументы с ключевым словом
Функции также могут быть вызваны с использованием keyword arguments
вида kwarg=value.
Пример
def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
print("-- This parrot wouldn't", action, end=' ')
print("if you put", voltage, "volts through it.")
print("-- Lovely plumage, the", type)
print("-- It's", state, "!")
keyword arguments принимает один обязательный аргумент (voltage) и три
необязательных (state, action и type). Эта функция может быть вызвана любым
из следующих способов:
parrot(1000) # 1 позиционный аргумент;
parrot(voltage=1000) # 1 аргумент ключевое слово;
parrot(voltage=1000000, action='VOOOOOM') # 2 аргумента ключевых слова;
parrot(action='VOOOOOM', voltage=1000000) # 2 аргумента ключевых слова;
parrot('a million', 'bereft of life', 'jump') # 3 позиционных аргумента;
parrot('a thousand', state='pushing up the daisies') # 1 позиционный, 1 ключевое
слово.
Но все следующие вызовы будут считаться недействительными:
parrot() # опущен обязательный аргумент;
parrot(voltage=5.0, 'dead') # аргумент без ключевого слова после аргумента с
ключевым словом;
parrot(110, voltage=220) # дублирование значения для одного и того же
аргумента;
parrot(actor='John Cleese') # неизвестный аргумент ключевое слово.
В вызове функции аргументы с ключевыми словами должны следовать
после позиционных аргументов. Все передаваемые аргументы с ключевым
словом должны соответствовать одному из аргументов, принимаемых
функцией (например, actor – не действительный аргумент для функции parrot),
и их порядок не важен. Это также включает неопциональные аргументы
(например, parrot(voltage=1000) также верно). Ни один аргумент не может
получить значение более, чем один раз.
49

Когда конечные формальные параметры представлены в форме **name,
функция принимает словарь, включающий все аргументы с ключевыми
словами за исключением тех, которые уже соответствуют формальным
параметрам. Это может быть скомбинировано с формальным параметром в
форме *name (описано в следующем подразделе), который получает кортеж,
включающий позиционные аргументы за списком формальных параметров.
(*name должен находиться перед **name).
Например, если мы определяем функцию, как эту:
def cheeseshop(kind, *arguments, **keywords):
print("-- Do you have any", kind, "?")
print("-- I'm sorry, we're all out of", kind)
for arg in arguments:
print(arg)
print("-" * 40)
keys = sorted(keywords.keys())
for kw in keys:
print(kw, ":", keywords[kw])
# Вызов функции
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
Результат
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
---------------------------------------client: John Cleese
shopkeeper: Michael Palin
sketch: Cheese Shop Sketch
Заметьте, что порядок, в котором аргументы с ключевыми словами
выводятся обязательно соответствуют порядку, в котором они были переданы в
функцию при вызове.
4.1.3. Произвольные списки аргументов
Наконец, реже используется возможность вызова функции с произвольным числом аргументов. Эти аргументы будут обернуты в кортеж Перед
переменным числом аргументов могут быть обычные аргументы или не быть
ни одного.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
