ПЗ №4. Использование функций

Хорошевич Павел Александрович

Описание и вызов функций

Терминология

Терминология

✍🏻 Задание № 1 - Вызов функции

Запишите результат выполнения следующих программ:

def g():
    date = "8 мая"
    print("Привет. Сегодня " + date)
def e(st):
    d = len(st)
    if d > 4:
        print(-1)
    else:
        print(d - 4)

e("пароль")
e("окно")

Запишите результат выполнения следующих программ:

def sl():
    print("Внимание!")

def ms():
    sl()
    print("Начинается контрольная работа!")

ms()
def ov(num):
    print(num % 2 == 0)

def pn(x):
    print(f"Число {x}")
    ov(x)

pn(7)

Порядок вычисления выражений

Инструкция return. Функции в выражениях

Функция, возвращающая результат работы с помощью return может использоваться в выражениях.

def square(x):
    y = x * x
    # возвращаем результат
    return y  

n = 10
result = square(n)
print("Результат:", result)

✍🏻 Задание № 2 - Вычисление значения выражения

Запишите результат выполнения следующих программ:

1

def ld(x):
    return x % 10

print(ld(64))
print(ld(7))

2

def dl(n):
    return len(str(n))

rs = dl(15) + dl(255)
print(rs)

3

def kb(x)
    return x ** 2

rs = kb(kb(2)) + 1
print(rs)

Визуальное представление выражений

Встретив в коде выражение, интерпретатор Python начинает вычисление его значения.

16 - 2 * 5 // 3 + 1
  1. 16 - 2 * 5 // 3 + 1

  2. 16 - 10 // 3 + 1

  3. 16 - 3 + 1

  4. 13 + 1

  5. 14

Python строит на основе выражения 16 - 2 * 5 // 3 + 1 следующее дерево:

AST

AST

16 - 2 * 5 // 3 + 1

AST

AST

значение -> значение

значение -> значение

вызов функции -> возвращаемое значение

вызов функции -> возвращаемое значение

переменная -> значение на которое она ссылается

переменная -> значение на которое она ссылается

оператор -> результат выполнения действия над операндами

оператор -> результат выполнения действия над операндами

✍🏻 Задание № 3 - Синтаксическое дерево

Изобразите в форме синтаксического дерева следующие выражения:

x = 5
y = 0.5
(x - y) / x # ?

x = "БГПУ"
y = 7
y - len(x) // 2 # ?

import math
i = [1, 1, 2, 3, 5]
math.sqrt(i[3] + 5)

A = False
B = True
not B or A and B

Интерфейс программирования приложения - API

Функции из стандартной библиотеки или сторонних модулей можно представить в виде “чёрного ящика” - важно знать интерфейс, но не обязательно реализацию.

Дана функция с одним параметром и возвращаемым значением. По выходным значениям определите, для чего предназначена функция.

?

Функция из задания находит индекс первого символа в строке, который является цифрой:

Рисунок 1: Интерфейс функции

Документация по встроенным в Python функциям: docs.python.org/3/library/functions.html

Дана функция с одним параметром и возвращаемым значением. По выходным значениям определите, для чего предназначена функция.

?

Функция из задания находит сумму нечётных цифр числа:

Рисунок 2: Интерфейс функции
def sum_digit(x):
    s = 0
    x = abs(x)
    while x != 0:
        dig = x % 10
        if dig % 2 != 0:
            s = s + dig
        x = x // 10
    return s

Заголовок функции

Напишите функцию, которая вернёт расстояния между двумя точками на плоскости.

Анализ условия:

  • Ввод: координаты двух точек на плоскости \((x_1, y_1)\) и \((x_2, y_2)\).

  • Вывод: расстояние между точками на плоскости \(d\).

  • Формула: \(d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\).

  • Название функции…

  • Количество и имена параметров…

  • print или return

def dist(x1, y1, x2, y2):
    return 0 # TODO: реализовать позже

✍🏻 Задание № 4 - Заголовок функции

Предложите запись заголовков для функций, решающих следующие задачи:

  1. Определить, принадлежит ли число заданному отрезку.
  2. Найти сумму чисел в списке, которые больше заданного значения.
  3. По году, номеру месяца и дня определить дату следующего дня.

Декомпозиция задачи

Одна функция может вызывать другие функции для получения результата. В таком случае говорится о композиции функций.

Декомпозиция - это разбиение крупной задачи на более мелкие до тех пор, пока решение подзадач не станет тривиальным.

Даны координаты центра окружности на плоскости и координаты точки лежащей на окружности. Вычислить площадь круга, ограниченного данной окружностью.

  1. Что дано?
  2. Что найти?

Декомпозиция задачи

Декомпозиция задачи
def distance(x1, y1, x2, y2):
    dx = x2 - x1
    dy = y2 - y1
    dsquared = dx**2 + dy**2
    result = dsquared**0.5
    return result

def areaR(radius):
    b = 3.1415 * radius ** 2
    return b

def area(x0, y0, xr, yr):
    radius = distance(x0, y0, xr, yr)
    result = areaR(radius)
    return result

print(area(0,0,1,1))

primer.py

primer.py