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

Процедуры и функции


Скачать 1.1 Mb.
НазваниеПроцедуры и функции
Дата09.05.2022
Размер1.1 Mb.
Формат файлаpdf
Имя файлаPython-911.pdf
ТипПрограмма
#519029

ПРОЦЕДУРЫ И ФУНКЦИИ

Подпрограммы
Подпрограмма
– это отдельная функционально независимая часть программы,
имеющая имя и решающая отдельную задачу.
Подпрограммы:

избавляют от необходимости многократно повторять в тексте программы аналогичные фрагменты;

улучшают структуру программы, облегчая ее понимание;

позволяют распределять большие задачи между несколькими разработчиками или стадиями проекта;

повышают устойчивость к ошибкам программирования и непредвидимым последствиям при модификациях программы.

Два типа подпрограмм
Процедуры
Функции
Подпрограммы
выполняют действия выполняют действия,
возвращают некоторый результат
В Python нет формального разделения подпрограмм на функции и
процедуры
(как,
например, в Паскале или Си), и процедурой можно считать функцию, возвращающую пустое значение

в основном используется единственный термин – функция.

Общий вид процедуры
def
name_procedury
(
параметры
)
:
тело процедуры
def
ine – определить имя процедуры, даётся тем, кто пишет программу если параметры не нужны ставят пустые скобки
()
пишут в скобках имена одной или нескольких переменных через запятую:
(n)
или
(a,b,c,d)
Параметр
– это переменная,
от значения которой зависит работа подпрограммы.

Вызов процедуры
или
name_procedury
()
name_procedury
(n)
name_procedury
(a,b,c,d)
или
При вызове процедуры нужно в скобках передать ей фактические значения параметров.
Аргумент
– это значение параметра, которое передаётся подпрограмме при её вызове.
Аргументом может быть не только постоянное значение (число, символ), но также переменная, и даже арифметическое выражение.

Простая процедура
вызов процедуры процедура основная часть программы

можно вызывать сколько угодно раз

нет дублирования кода

изменять в одном месте

Процедура с параметрами
символьная строка

Общий вид функции
def
name_function
(
параметры
)
:
тело функции
return (
результат
)
def
ine – определить имя функции, даётся тем, кто пишет программу
Выражение,
стоящее после ключевого слова return будет возвращаться в
качестве результата вызова функции.
Результат вызова функции можно:
✓ присвоить переменной,
✓ использовать его в качестве операндов математических выражений, т.е. составлять более сложные выражения.
Функция
– это вспомогательный алгоритм, который возвращает результат
(число, строку символов и др.).

Функция
Пример.
Написать функцию,
которая вычисляет среднее арифметическое двух целых чисел.
исходные данные результат функции
def Avg(a, b):
return (a+b)/2
a = 2; b = 5
print(Avg(a,b))
Что делает программа?
Ещё пример.

Функция
Пример.
Написать функцию,
которая вычисляет наименьший общий делитель двух целых чисел.

Глобальные и локальные переменные
Переменные,
которые введены в
основной программе,
называются
глобальными
(общими). Их могут использовать все подпрограммы (процедуры и функции).
Переменные, которые используются только внутри процедуры или функции,
называются
локальными
(местными). К ним можно обращаться только внутри этой
подпрограммы, остальные подпрограммы и основная программа их не видят.
Такой прием называется
инкапсуляцией
(от латинского «помещение в капсулу»).
Локальная переменная создается только при вызове процедуры или функции.
Как только работа подпрограммы будет закончена, все локальные переменные будут удаляться из памяти.
Имена локальных переменных в каждой подпрограмме можно выбирать независимо от имён локальных переменных других подпрограмм.

Глобальные и локальные переменные
def show():
print( s )
def showLocal():
s = 7 print( s)
def showGlobal():
global
s s = 7 print( s )
Процедура выводит значение
s.
После запуска транслятор сначала ищет локальную переменную с таким именем – её нет. Потом он начинает искать глобальную переменную: если такая переменная есть, на экран выводится её значение, если нет –
будет выдано сообщение об ошибке.
Даже если существует глобальная переменная s, в первой строчке этой процедуры будет создана новая локальная переменная s, и её
значение
(7)
появится на экране.
Эта процедура работает с глобальной переменной s. Она присвоит ей новое значение
7
(это
«увидят»
все остальные подпрограммы) и выведет его на экран.
Нужно стараться писать подпрограммы, которые не обращаются к глобальным переменным.

Глобальные и локальные переменные
В данном коде переменная b в функции локальная или глобальная?
Не запуская код, ответьте на вопрос: что выведет на экран данная программа?

Глобальные и локальные переменные
Не запуская код, выберите, какие из программ во время запуска получат ошибку выполнения.

Глобальные и локальные переменные
Не запуская код, ответьте на вопрос: что выведет на экран данная программа?

Функция
Пример. Функция перевода десятичного числа в двоичное.
В основной ветке программы будем выполнять бесконечный цикл, в котором
1. запрашивается десятичное число,
2. если оно не ноль, то вызывается функция перевода его в двоичное представление и выводится результат работы функции на экран,
3. иначе (когда введен 0) будем прерывать цикл оператором break.

Функция
Пример. Вам даны 4 отрезка.
Выведите YES, если среди них найдутся 3, из которых можно составить треугольник, и NO в противном случае.
Для решения напишите функцию triangle(a,
b,
c),
которая будет возвращать
True, если из трёх заданных отрезков можно составить треугольник, и False иначе.

Задачи
1)
Напишите процедуру,
которая принимает параметр – натуральное число N – и выводит на экран две линии из N символов "–".
2) Напишите процедуру, которая принимает один параметр – натуральное число N, – и выводит на экран прямоугольник длиной N
и высотой
3 символа.
3) Напишите процедуру, которая выводит на экран треугольник со стороной N символов. При запуске программы N нужно ввести с клавиатуры
Пример
:
Длина цепочки:
7
-------
-------
Пример
:
Длина прямоугольника:
7
ooooooo
o
o
ooooooo
Пример
:
Сторона:
5
o
oo
ooo
oooo
ooooo

Задачи
4) Напишите функцию, которая вычисляет среднее арифметическое пяти целых чисел.
5) Напишите функцию, которая находит количество цифр в десятичной записи числа.
6) Напишите функцию, которая находит количество нулей в двоичной записи числа (c клавиатуры вводится десятичное число).
7) Найти периметр треугольника, заданного координатами своих вершин.
(Определить функцию для расчета длины отрезка по координатам его вершин.)
8) Найти все трехзначные простые числа. (Определить функцию, позволяющую распознавать простые числа.)

Найти все трехзначные простые числа

Задачи
9) Получить все шестизначные счастливые номера. Счастливым называют такое шестизначное число, в котором сумма его первых трёх цифр равна сумме его последних трёх цифр. (Определить функцию для расчета суммы цифр трёхзначного числа.)
10) Даны шесть различных чисел. Определить максимальное из них.
(Определить функцию, находящую максимум из двух различных чисел.)
11) Составить программу, в результате которой величина а меняется значением с величиной b, а величина c – с величиной d. (Определить процедуру,
осуществляющую обмен значениями двух переменных величин.)

Задачи
12) Даны стороны двух треугольников. Найти сумму их периметров и сумму их площадей. (Определить процедуру для расчета периметра и площади
треугольника по его сторонам.)
13) Даны основания и высоты двух равнобедренных трапеций. Найти сумму их периметров и сумму их площадей. (Определить процедуру для расчета периметра и площади равнобедренной трапеции по ее основаниям и высоте.)
14)
В
зависимости от выбора пользователя вычислить площадь круга,
прямоугольника или треугольника. Для вычисления площади каждой фигуры должна быть написана отдельная функция.
15) Напишите функцию, которая возвращает количество цифр в восьмеричной записи числа.

Задачи
16) Напишите процедуру с параметрами n и s, которая выводит квадрат размером
nxn из символа, который вводится с клавиатуры. Используя эту процедуру,
напишите программу, которая запрашивает два значения – строну квадрата и символ, и вызывает процедуру рисования требуемого квадрата
17) Напишите процедуру, которая выводит на экран все делители числа N в одну строку через пробел. Используя данную процедуру, составьте программу, которая для всех введенных натуральных чисел (числа вводятся до 0, 0 - признак окончания ввода) выводит делители текущего числа.
18) Напишите логическую функцию isByte, которая возвращает значение True, если переданное ей число помещается в 8-битную ячейку памяти (вспомните, какое минимальное и какое максимальное числа можно записать с помощью 8 бит).

Задачи
19) Напишите логическую функцию pointInRect, которая возвращает значение True,
если точка с заданными координатами находится внутри прямоугольника, для которого заданы координаты верхнего левого и правого нижнего углов. Стороны прямоугольника параллельны осям координат.
20) Напишите логическую функцию pointInTriangle, которая возвращает значение
True, если точка с заданными координатами находится внутри треугольника,
заданного координатами трёх своих вершин.
21) На соревнованиях выступление спортсменов оценивают пять экспертов, каждый из них выставляет оценку в баллах ( целое число от 0 до 100). Для получения итоговой оценки лучшая и худшая из оценок экспертов отбрасываются, а для остальных трёх находится среднее арифметическое. Напишите функцию, которая принимает пять оценок экспертов и возвращает итоговую оценку спортсмена.

Рекурсия
Рекурсия
– это определение объекта через такой же объект (или объекты),
но с другими параметрами.
Рекурсивная подпрограмма
вызывает саму себя напрямую или через другие подпрограммы.
Количество вложенных вызовов функции или процедуры называется
глубиной рекурсии
. По умолчанию глубина рекурсии в языке Питон ограничена 1000 вызовов.
Рекурсивная программа позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причем без явных повторений частей программы и использования циклов.

Рекурсия
def F(n):
if n > 2:
return F(n-1)+ F(n-2)
else: return 1
n=int(input())
print(F(n))
F(
5
)
F(
4
)
F(
3
)
F(
2
)
F(
1
)
F(
3
)
F(
2
)
F(
2
)
F(
1
)
1
1
1
1
1
+
+
+
+
Рассмотрим рекурсию на примере:

Примеры
Рассмотрим пример функции вычисления факториала.
Программирование рекурсии выглядит так:
✓ Функция должна сначала проверить,
не является ли переданный набор параметров простым
(крайним)
случаем. В этом случае функция должна вернуть значение
(или выполнить действия), соответствую- щие простому случаю.
✓ Иначе функция должна вызвать себя рекурсивно для другого набора параметров, и на основе полученных значений вычислить значение,
которое она должна вернуть.

Примеры
Вычисление суммы натуральных чисел от 1 до n.
def sum(n):
if n == 1: return 1
else:
return n + sum(n-1)
def power(a, n):
if n == 0:
return 1
elif n % 2 == 1:
return power(a, n - 1) * a else:
return power(a, n // 2) ** 2
Быстрое возведение в степень

Задачи
Чему равна сумма всех чисел,
напечатанных на экране при выполнении вызова F(1)?
def F(n):
print(n)
if n < 5:
F(n + 1)
F(n + 3)
def F(n):
print(n)
if n > 1:
F(n - 1)
F(n - 3)
def F(n):
if n > 2:
return F(n-1) + G(n-2)
else: return n
def G(n):
if n > 2:
return G(n-1) + F(n-2)
else: return n+1
Чему будет равно значение, вычисленное при выполнении вызова F(6)?


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