Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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 Задание по циклическому оператору.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]