Проверить программы онлайн · файлы остаются в браузере
10 класс, углублённый уровень. Занятие десятое: в прошлой паре мы
звали чужие функции из библиотеки — сегодня пишем свои. Кусок программы
получает имя, вход (параметры) и выход (return).
None, где чья переменная, сколько раз зовётся функция в цикле,
какая строка упадёт, где сработает ранний return. Потом три
программы, в каждой — своя функция с оговорённым именем. Проверяет их оболочка
Проверка.bat из общей папки: она запускает программу на девяти
наборах данных, а потом зовёт твою функцию напрямую и смотрит, что она
вернула. Интернет не нужен.
Шесть типов задач, по одной на каждый. Считать в уме или на бумаге:
сначала найди, где функцию зовут и с какими аргументами, потом подставь их в
параметры. Ответ — всё напечатанное через пробел; True,
False и None пиши так, как их печатает Python. Ошибся
— ниже появится разбор рисунком и кнопка «Новые числа»: реши такую же ещё раз.
def только запоминает функцию — ничего не считает. Считать
она начинает при вызове: аргументы по порядку встают в параметры, строки
тела выполняются, return отдаёт значение туда, где стоял вызов.
| Процедура | Функция | |
|---|---|---|
| что делает | что-то делает: печатает, рисует | что-то считает и отдаёт через return |
| что возвращает | None — «ничего» | число, True/False… |
| как зовут | отдельной строкой: show(5) |
внутри выражения: y = f(5) + 1, if is_prime(n): |
В Python обе пишутся через def; разница только в
return. В заданиях практикума функции обязаны возвращать:
напечатанное нельзя сложить, сравнить или поставить в if.
NameError).m = inc(m).«Нашёл — ответил» пишется return внутри цикла, а «не нашёл» —
после цикла. Поставить return True в else внутри
цикла — частая ошибка: функция ответит на первом же витке.
Функция, которая отвечает True или False, —
признак: if is_prime(x): читается как фраза. Строка в
тройных кавычках первой строкой тела — документация:
help(nod) покажет её так же, как у math.isqrt.
def — функцию нельзя позвать выше её
определения (NameError).TypeError.zadanie1.py, zadanie2.py, zadanie3.py.def и зовёт функцию напрямую на своих
числах. Функции нет или она печатает вместо return — задание
не принято, даже если вывод программы верный.input(). Пиши input(),
а не input("Введите число: ") — вывод читает машина.# Ввод:, # Вывод:, # Пример:) —
по желанию. Если она есть, пример в ней оболочка проверит запуском.Напиши функцию , которая возвращает сумму цифр
натурального числа
. Программа читает два натуральных числа
и
(1 ≤ a ≤ b ≤ 100000), каждое со своей строки, и
печатает, какая наибольшая сумма цифр встречается среди чисел от
до
и у скольких чисел она такая.
Функция: — один параметр, возвращает число.
19 28
Наибольшая сумма цифр: 10 Чисел с такой суммой: 2
Проверяется: функция digsum на семи числах напрямую; ничья по наибольшей сумме (19 и 28), однозначные числа, 100000.
Внутри — знакомый цикл: отрываем последнюю цифру
, прибавляем, отрезаем
, пока
. В конце —
, а не
.
Ловушки, ради которых это задание. В основной программе два накопителя: наибольшая сумма и счётчик. Нашлась сумма больше — запоминаем её и счётчик снова 1; такая же — счётчик плюс один. Кто считает только «больше», на 19…28 напечатает 1 вместо 2.
Напиши функцию-признак : возвращает
, если
простое, и
, если нет.
Программа читает количество чисел
(от 1 до 20), затем
натуральных чисел до 1000000000, каждое со своей строки.
Печатает, сколько среди них простых и какое простое наибольшее (0, если
простых нет).
Функция: — один параметр, возвращает
или
.
4 1 2 3 961
Простых: 2 Наибольшее простое: 3
Проверяется: is_prime на двенадцати числах напрямую — 1, 2, квадраты простых, простое под миллиард; перебор до корня.
Перебирай делители от 2, пока
.
Нашёлся —
сразу; цикл закончился —
. Ранний
здесь — главный приём.
Ловушки, ради которых это задание. 1 не простое — без отдельной
проверки функция ответит . Граница
пропускает 961 = 31 · 31. Перебор до самого
на
999999937 не успеет за пять секунд.
Напиши две функции: — наибольший общий делитель
своим алгоритмом Евклида (готовую
из
сегодня брать нельзя), и
— наименьшее
общее кратное через
. Программа читает количество чисел
(от 1 до 10), затем
натуральных чисел до 1000,
каждое со своей строки, и печатает НОК всех чисел.
Функции: и
— по два
параметра, возвращают число.
4 4 6 8 10
НОК: 120
Проверяется: nod и nok напрямую, в том числе на единицах и равных числах; старт накопителя; что gcd не взята из math.
Евклид остатками: пока — остаток
, потом
,
; ответ —
. НОК двух чисел —
.
Ловушки, ради которых это задание. Накопитель НОК стартует
единицей: . С нуля всё умножится на ноль — в
прошлой паре у НОД было наоборот. Условие
обрывает Евклида раньше времени у взаимно простых чисел.
zadanie1.py … zadanie3.py лежат в твоей
папке, отладочные print из них убраны.Проверка.bat.Оболочка показывает, на каких данных программа ошиблась и что должна была вывести, а если не так ведёт себя функция — какой вызов что вернул и что должен был. Исправляй и проверяй снова, попыток сколько угодно.
def имя(параметры): — тело — return значение. def только запоминает функцию, считает она при вызове. Аргументы встают в параметры по порядку: f(7, 2) в def f(a, b) даёт a = 7, b = 2.
Процедура делает (печатает), функция считает и отдаёт через return. Без return функция отдаёт None: print(show(4)) напечатает то, что печатает show, а потом None. К None нельзя прибавить число.
Параметры и переменные, созданные внутри, живут только внутри функции. В параметр приходит копия числа: внешняя переменная не меняется. Нужно новое значение — m = inc(m).
Сразу выходит из функции, даже из середины цикла. «Нашёл — return» внутри цикла, «не нашёл — return» после цикла. Строки после return не выполняются.
Признак возвращает True или False и стоит прямо в if: if is_prime(x):. Одна функция может звать другую: nok(a, b) = a // nod(a, b) * b.
Сначала все def, потом основная программа. Вызов выше def — NameError; не то число аргументов — TypeError. """Строка документации""" первой строкой функции — её показывает help().
Материалы подготовлены с использованием технологий искусственного интеллекта.