Разработка подпрограмм

Большая задача — это несколько маленьких, и у каждой своё имя. 10 класс, углублённый уровень — занятие одиннадцатое, практическая работа.

Урок 21 плана — «Практическая работа по теме "Разработка подпрограмм"», урок 22 — резервное время: он уходит на четвёртую программу и доделку. В прошлый раз функция в задаче была одна. Сегодня их две: кирпич и функция, построенная из него.

Сверху вниз

Задача: сколько палиндромов среди чисел от a до b.

c = 0
for x in range(a, b + 1):
    if is_pal(x):
        c = c + 1

Пишем основную программу так, будто is_pal уже есть. Получилось четыре строки, и они читаются как фраза.

Договор функции

ФункцияПринимаетВозвращает
rev(n)натуральное числочисло задом наперёд: rev(120) → 21
is_pal(n)натуральное числоTrue или False
days_in_month(m, y)месяц, потом годчисло дней

Вызов внутри вызова

def f(x):
    return x * 2 + 1
def g(x):
    return x // 3

print(f(g(21)), g(f(21)))

Кто считается первым в f(g(21))?

Функция из функций

def big(a, b):
    if a > b:
        return a
    return b

def big3(a, b, c):
    return big(big(a, b), c)

print(big3(40, 75, 12))

big3 сама ничего не сравнивает — она дважды зовёт big.

Кирпич проверяем отдельно

print(rev(7), rev(120), rev(12321))       # 7 21 12321
print(is_pal(7), is_pal(10), is_pal(121)) # True False True

Печатающий кирпич

def half(x):
    print(x // 2)

def calc(x):
    return half(x) + 1

print(calc(10))

half печатает 5 — и на этом её работа кончена.

Где стоит def

def calc(a):
    return twice(a) + 1

def twice(a):
    return a * 2

print(calc(5))

twice определена ниже calc. Это ошибка?

Поиск: нашёл — в цикле, не нашёл — после

def good(n):
    return n % 7 == 0

def first(a, b):
    for i in range(a, b + 1):
        if good(i):
            return i
    return -1

print(first(30, 40), first(50, 54))

first спрашивает good про числа по порядку и на первом «да» выходит.

Что делаем сегодня

  1. Тренажёр — шесть задач о том, как функции зовут друг друга.
  2. Четыре программы, в каждой кирпич и функция из него: rev и is_pal, sumdiv и is_abundant, sq_digits и is_happy, is_leap и days_in_month.
  3. Проверка оболочкой — Проверка.bat: девять наборов данных на программу, потом оболочка зовёт каждую функцию напрямую.

Отметка: четыре задания — «5», три — «4», два — «3». Попыток сколько угодно. Для этой пары — новая папка: в прошлой уже лежат свои zadanie1.py.

За работу

Сначала тренажёр, потом четыре программы — по порядку.

Домашнее задание — на странице «Домашнее задание»: шесть типов задач на чтение программ из нескольких функций, Python дома не нужен. В начале следующей пары — проверочная по этим же типам.

Материалы подготовлены с использованием технологий искусственного интеллекта. Пробел раскрыть и дальше · ← → слайды