Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Современные средства разработки программного обеспечения. Учебное пособие
.pdf
31
<операторы кода 1>
elif <условие 2>:
#if the above condition was False and this condition is True,
# run the code in this block
<операторы кода 2>
elif <условие 3>:
#if the above condition was False and this condition is True,
# run the code in this block
<операторы кода 3>
else:
#if the two above conditions are False run this code
<операторы кода 4>
Пример. Программа, определяющая четверть координатной плоскости с ис-
пользованием каскадной инструкции if... elif... else:
x = int(input())
y = int(input())
if x > 0 and y > 0:
print("Первая четверть")
elif x < 0 and y > 0:
print("Вторая четверть")
elif x < 0 and y < 0:
print("Третья четверть")
elif x > 0 and y < 0:
print("Четвертая четверть")
else:
print("Точка находится на осях или в центре координат.")
В такой конструкции условия if, ..., elif проверяются по очереди, выполняется
блок, соответствующий первому из истинных условий. Если все проверяемые условия ложны, то выполняется блок else, если он присутствует. Таким образом отлавливают ситуацию, когда точка не находится ни в одной из четвертей.
Составные выражения
Пример. Реализовать проверку попадания заданного числа x в диапазон [2; 7].
Здесь сначала нужно проверить, что x >= 2 затем проверить x <= 7. Если оба этих

32
условия выполняются одновременно, то x попадает в заданный диапазон. Проверка
на Python:
x = 4
if x >= 2 and x <= 7 :
print("x попадает в [2; 7]")
else:
print("x не попадает в [2; 7]")
здесь два условия объединены операцией логического «И» and . В результате,
общее составное условие будет считаться истинным, только если истинно и первое и
второе условие.
Пример. П условие, что x не принадлежит диапазону [2; 7].
Проверка на Python:
x = 40
if(x < 2 or x > 7):
print("x не попадает в [2; 7]")
else:
print("x попадает в [2; 7]")
Здесь в составном условии используется связка по or (логическое ИЛИ) и оно
будет истинно, если истинно или первое, или второе условие.
3.2 Циклы
Оператор цикла задает повтор действий до тех пор, пока выполняется опреде-
ленное условие.
Оператор цикла состоит из ключевого слова, условного выражения или итера-
тора и тела цикла. Ключевое слово определяет начало цикла и его вид. Условное вы-
ражение, как и в случае условного оператора представляет собой логическое выражение, т.е. выражение, результатом которого является логическое значение True (истина) или False (ложь), может быть простым и составным. Тело цикла – это набор ин-

33
струкций, которые должны повторяться. Однократное выполнение тела цикла назы-
вается итерацией. То есть, может быть первая итерация, вторая итерация, N-я итерация и так далее.
В Питоне имеется два типа циклов: while и for.
Оба вида циклических структур могут включать условные выражения и специальные операторы прерывания: continue, break.
Цикл while
Синтаксис цикла while в простейшем случае выглядит так:
while <выражение истинно>:
<Блок_инструкций>
Также может присутствовать оператор else
while <выражение истинно>:
<осуществление операций>
else:
<обработается только при несрабатывании инструкции
«break»>
Пример. Вывести все степени двойки, не превосходящие числа n:
a = 1
while a <= n:
print(a)
a *= 2
Цикл for
Оператор for в Python выполняет итерацию по элементам любой последовательности (списку или строке) в том порядке, в котором они появляются в последовательности. Пробегаясь по набору значений, for помещает каждое значение в переменную,
и затем в теле цикла можно с этой переменной производить различные действия.
Синтаксис цикла for:
for <перебор итерируемого объекта>:
<осуществление операций над каждым элементом>
else:

34
<обработается только при несрабатывании инструкции
«break»>
Цикл for позволяет перебирать элементы по индексу или напрямую.
Пример. Последовательный перебор циклом for целых чисел из диапазона [a;
b) c шагом h:
for i in range(a, b, h):
print(i)
Аналогично с циклом while:
i = a
while i > b:
print(i)
i += h
Пример. Вычислить сумму отрезка степенного ряда
=
=
n
i
i
gc
1
, где n>0, n и g
вводятся с клавиатуры.
print("Введите Значение g: ")
g=float(input())
while(True):
n=int(input('Введите значение n:'))
if(n >0): break
print("Ошибка! n должно быть >0! \n")
c=0
p=1
for i in range(1,n+1):
p*=g
c+=p
print("Сумма равна: %f\n" % (c))
Результат работы программы:
Введите Значение g:
2
Введите значение n:5
Сумма равна: 62.000000

35
Пример. Программа для печати таблицы значений функции у=х2+1 во введен-
ном диапазоне от a до b с шагом h:
print("Введите диапазон и шаг изменения аргумента: ")
a=float(input('Введите начало диапазона:'))
b=float(input('Введите конец диапазона:'))
h=float(input('Введите шаг табулирования:'))
print("| a | b | f(x) |\n")
x=a
count=int((b-a)/h)
for i in range(count):
y=x*x+1
print("| %5.2f | %5.2f | %7.2f |\n" % (x, x+h,y))
x=x+h
Результат работы программы:
Введите диапазон и шаг изменения аргумента:
Введите начало диапазона:1
Введите конец диапазона:2
Введите шаг табулирования:0.3
| a | b | f(x) |
| 1.00 | 1.30 | 2.00 |
| 1.30 | 1.60 | 2.69 |
| 1.60 | 1.90 | 3.56 |
Пример. Программа вычисления квадратного корня вещественного аргумента x
с заданной точностью Eps по итерационной формуле:
yn = 1/2(y
n-l
+ x/y
n-l
) ,
где y
n-1
– предыдущее приближение к корню (в начале вычислений – это началь-
ное приближение, выбирается произвольно), уn – последующее приближение. Процесс вычислений прекращается, когда приближения станут отличаться друг от друга
по абсолютной величине менее чем на величину заданной точности. Для вычисления
абсолютной величины используется стандартная функция abs().
Исходный код:
# X и Eps # аргумент и точность
yp=0.1 # предыдущее приближение

36
y = 1 # последующее приближение
print("Введите аргумент и точность")
x=float(input('Введите аргумент: '))
eps=float(input('Введите точность:'))
y=(yp+x/yp)/2
d=abs(y-yp)
while (d>eps):
yp=y
y=(yp+x/yp)/2
d=abs(y-yp)
print("Kopeнь из %f равен %f"% (x, y))
Результат работы программы:
Введите аргумент и точность
Введите аргумент: 4
Введите точность:0.001
Kopeнь из 4.000000 равен 2.000000
3.3 Функция
Функция – это именованный фрагмент программного кода, к которому можно
обратиться из другого места программы. Функции обеспечивают лучшую модульность приложения и значительно повышают уровень повторного использования кода.
В Python ключевое слово def вводит определение функции. За ним должно сле-
довать имя функции и заключенный в скобки список формальных параметров. Операторы, формирующие тело функции, начинаются со следующей строки и должны
иметь отступ.
Т. е. функция определяется следующим образом:
def <имя_функции>(<аргументы функции>):
операции функции
Пример функции:
def calc(a, b):
z=(a+b)/2

37
return z
Выражение return прекращает выполнение функции и возвращает указанное
после выражения значение. Выражение return без аргументов – это то же самое, что
и выражение return None.
Для вызова функции следует написать ее имя и добавить скобки с фактическими параметрами.
Например, переменной sum присвоено значение вызванной функции calc:
sum=calc(7, 19)
Аннотации функций
Аннотации функций представляют собой необязательные метаданные о типах,
используемых определяемыми пользователем функциями (см. PEP 3107 и PEP 484
для получения дополнительной информации).
Аннотации хранятся в атрибуте функции __annotations__ в виде словаря и не
влияют ни на какую другую часть функции. Аннотации параметров определяются
двоеточием после имени параметра, за которым следует выражение, равное значению
аннотации. Возвращаемые аннотации определяются литералом ->, за которым следует выражение, между списком параметров и двоеточием, обозначающим конец def
инструкции [10].
Пример. Определение функции, в которой есть обязательный аргумент, необя-
зательный аргумент и возвращаемое значение с комментариями:
Вызов функции: fAnnot(0.01)
Результат функции:
Annotations: {'eps': <class 'float'>, 'name': <class
'str'>, 'return': <class 'str'>}
Arguments: 0.01 eps
Лямбда-выражения

38
Лямбда-выражения – это небольшие анонимные функции. Создаются с помощью ключевого слова lambda.
Пример. Функция возвращает сумму двух своих аргументов:
lambda a, b: a+b.
Лямбда-функции можно использовать везде, где требуются функциональные
объекты. Они синтаксически ограничены одним выражением. Семантически они
представляют собой просто синтаксический сахар для обычного определения функции.
Подобно определениям вложенных функций, лямбда-функции могут ссылаться
на переменные из содержащей области видимости:
Другое применение - передача небольшой функции в качестве аргумента.
Декораторы
В Python декоратор – это шаблон проектирования, который позволяет изменять
функциональность функции путем обертывания ее в другую функцию.
Внешняя функция называется decorator, которая принимает исходную функцию в качестве аргумента и возвращает ее модифицированную версию. Применение
декораторов позволяет добавлять функциональность функции без изменения кода
этой функции.
Такой подход способствует многократному использованию, модульности и разделению задач в программах на Python. Это отличный способ применить функциональность многократного использования к нескольким функциям, таким как синхронизация, кэширование, ведение журнала или аутентификация.
Реализация декораторов на Python требует знания различных концепций, таких
как объекты первого класса и вложенные функции [11].

39
Функции в Python являются объектами первого класса, также называемые
функциями более высокого порядка т.е. функции могут быть:
– переданы функции в качестве параметра;
– возвращены из функции;
– назначены переменной.
Пользовательские декораторы создают оболочку поверх функций и могут быть
добавлены к любой функции.
Чтобы написать простой декоратор на Python нужно выполнить пошаговую инструкцию [12]:
1 Определить функцию более высокого порядка, которая принимает функцию
в качестве входных данных.
2 Внутри этой функции более высокого порядка определить вложенную
функцию (оболочку), которая изменит или расширит поведение входной функции.
3 Вызвать входную функцию внутри функции-оболочки и добавить любую
дополнительную нужную функциональность.
4 Вернуть функцию-оболочку из функции более высокого порядка
Пример.
def decorator_with_args(arg1, arg2):
def actual_decorator(func):
def wrapper( * args, ** kwargs):
print(f "Decorator argument 1: {arg1}")
print(f "Decorator argument 2: {arg2}")
func( * args, ** kwargs)
return wrapper
return actual_decorator
def greet(name):
print(f "Hi, {name}!")
greet("John")
Оформление функций параметрами

40
При оформлении функций, которые принимают параметры, нужно использовать синтаксис * args и ** kwargs, чтобы гарантировать, что декоратор может обраба-
тывать любое количество позиционных аргументов и ключевых слов.
Синтаксис * args позволяет функции-оболочке принимать любое количество
позиционных аргументов, в то время как ** kwargs позволяет ей принимать любое
количество аргументов ключевого слова.
Пример.
def print_arguments_decorator(func):
def wrapper( * args, ** kwargs):
print(f "Positional arguments: {args}")
print(f "Keyword arguments: {kwargs}")
return func( * args, ** kwargs)
return wrapper
def example_function(a, b, c, x = 1, y = 2, z = 3):
return a + b + c + x + y + z
example_function(10, 20, 30, x = 5, y = 10, z = 15)
Подробности об определении функций, такие как: функции с переменным количеством аргументов; аргументы ключевых слов; специальные параметры; списки
произвольных аргументов; распаковка списков аргументов можно рассмотреть в офи-
циальном руководстве по Python [13].
3.4 Лабораторная работа
Цель. Научиться работать с условными и циклическими операторами в Python.
Задания
Разработать программное средство для реализации следующих задач:
1 Задание по условному оператору. Согласно индивидуальному варианту
выполнить обработку данных с помощью условного оператора.
2 Задание по циклическому оператору.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
