{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Классная работа" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func25.** Описать функцию `triangle_ps(a)`, вычисляющую по стороне a равностороннего треугольника его периметр $P = 3a$ и площадь $S = a^2\\frac{\\sqrt{3}}{4}$ и возвращающую их в виде двух вещественных чисел (`a` — вещественный параметр). С помощью этой функции найти периметры и площади трех равносторонних треугольников с данными сторонами. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "def triangle_ps(a):\n", " return 1,2 #чтобы на этот раз никто не сомневался - это просто заглушка. Сделайте правильную реализацию по формулам." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "for i in range(1): # сколько раз требуется?\n", " a = float(input(\" a = \"))\n", " print(f'Периметр P и площадь S равностороннего треугольника со стороной {a} равны {triangle_ps(a)}, соответственно.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Замечание.* Обратите внимание, что эта функция возвращает два значения. Каждое из них можно вывести и отдельно, например, так: `print(TrianglePS(a)[0])` (индекс 0 в квадратных скобках соответствует первому возвращаемому значению, 1 — второму). Попробуйте сделать более красивый вывод!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# блок тестирования функции\n", "assert triangle_ps(2)==(6.0, 1.7320508075688772), \"Test 1\"\n", "assert triangle_ps(1)==(3.0, 0.4330127018922193), \"Test 2\"\n", "assert triangle_ps(2.34)==(7.02, 2.3710043504810354), \"Test 3\"\n", "assert triangle_ps(3)[0]==9, \"Test 4\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func27.** Описать функцию `DigitCS(K)`, находящую и возвращающую количество $C$ цифр целого положительного числа $K$, а также их сумму $S$ (`K` — параметр целого типа). С помощью этой функции найти количество и сумму цифр для каждого из пяти данных целых чисел. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "def digit_cs(K):\n", " return 1 #заглушка" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#основная программа\n", "\n", "#внимательно читаем задание и пишем здесь основную программу с вызовом написанной функции..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* При реализации функции используйте цикл (подумайте, какого типа) для определения количества цифр (разрядности числа) и подсчета их суммы." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# блок тестирования функции\n", "assert digit_cs(50)==(2,5), \"Test 1\"\n", "assert digit_cs(123)==(3,6), \"Test 2\"\n", "assert digit_cs(300201)==(6,6), \"Test 2\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func30.** Описать функцию `add_left_digit(D, K)`, добавляющую к целому положительному числу $K$ слева цифру $D$ и возвращающую полученное число ($D$ и $K$ — параметры целого типа, причем $D$ лежит в диапазоне $1–9$. С помощью этой функции последовательно добавить к данному числу $K$ слева данные цифры $D_1$ и $D_2$, выводя результат каждого добавления. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "def add_left_digit(D, K):\n", " return 1 #заглушка" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#основная программа\n", "\n", "#внимательно читаем задание и пишем здесь основную программу с вызовом написанной функции..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* При реализации функции попробуйте использовать уже написанную выше функцию `digit_cs(K)`. Для этого ячейка с соответствующей функцией должна быть предварительно запущена." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Замечание.* Помните тему *модулей с функциями* из лекции? Здесь, в Jupyter Notebook, можно работать по тому же принципу благодаря цельной структуре файла, не создавая отдельные файлы с собранными функциями в текущей рабочей папке." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# блок тестирования функции\n", "assert add_left_digit(1,234)==1234, \"Test 1\"\n", "assert add_left_digit(3,14)/100==3.14, \"Test 2\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func50.** Описать функцию `time_to_hms(T)`, определяющую по времени $T$ (в секундах) содержащееся в нем количество часов $H$, минут $M$ и секунд $S$ и возвращающую значения $H$, $M$, $S$ (все параметры $T$, $H$, $M$ и $S$ — целые). Используя эту функцию, найти количество часов, минут и секунд для пяти данных отрезков времени $T_1$, $T_2$, …, $T_5$. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "def time_to_hms(T):\n", " return 1,1,1 #заглушка\n", "# значения идут по порядку: часы, минуты, секунды" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#основная программа\n", "for i in range(5):\n", " t=int(input(\"input t \"))\n", " print(time_to_hms(t))\n", "#внимательно читаем задание и пишем здесь основную программу с вызовом написанной функции..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* Используем только арифметические операции, включая целочисленное деление и взятие остатка. Никаких циклов! Для удобства опишите в теле функции вспомогательные локальные переменные." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# блок тестирования функции\n", "assert time_to_hms(3600)==(1,0,0), \"Test 1\"\n", "assert time_to_hms(5689)==(1,34,49), \"Test 1\"\n", "\n", "# Напишите еще несколько тестов самостоятельно!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Домашняя работа" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func29.** Описать функцию `add_right_digit(D,K)`, добавляющую к целому положительному числу $K$ справа цифру $D$ и возвращающую полученное число ($D$ и $K$ — параметры целого типа, причем $D$ лежит в диапазоне $0–9$). С помощью этой функции последовательно добавить к данному числу $K$ справа данные цифры $D_1$ и $D_2$, выводя результат каждого добавления. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#основная программа\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# блок тестирования функции\n", "assert add_right_digit(1,234)==2341, \"Test 1\"\n", "assert add_right_digit(6,5232)==52326, \"Test 2\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* Не переусложните реализацию!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func37.** Описать функцию `power_1(A, B)` вещественного типа, находящую величину $A^B$ по формуле $A^B = \\exp(B·\\ln(A))$ (параметры $A$ и $B$ — вещественные). В случае нулевого или отрицательного параметра $A$ функция возвращает $0$. С помощью этой функции найти степени $A^P$, $B^P$, $C^P$, если даны числа $P$, $A$, $B$, $C$. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* Подключите математическую библиотеку `import math` и используйте функции `exp` и `log`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert power_1(-1, 2)==0, \"Test 1\"\n", "assert power_1(2, 1)==2, \"Test 2\"\n", "assert power_1(4, 5)==1024, \"Test 3\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func38.** Описать функцию `power_2(A, N)` вещественного типа, находящую величину $A^N$ ($A$ — вещественный, $N$ — целый параметр) по следующим формулам:\n", "\n", "$A^0 = 1$;\n", "\n", "$A^N = A·A·…·A$ $\\quad$ ($N$ сомножителей), $\\quad$ если $N > 0$;\n", "\n", "$A^N = 1/(A·A·…·A)$ $\\quad$ ($|N|$ сомножителей), $\\quad$ если $N < 0$.\n", "\n", "С помощью этой функции найти $A^K$, $A^L$, $A^M$, если даны числа $A$, $K$, $L$, $M$. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* Используйте условный оператор и циклы for." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert power_2(2, -2)==0.25, \"Test 1\"\n", "assert power_2(2, 0)==1, \"Test 2\"\n", "assert power_2(4, 5)==1024, \"Test 3\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func39.** Используя функции `power_1` и `power_2` из **Func37** и **Func38**, описать функцию `power_3(A, B)` вещественного типа с вещественными параметрами, находящую $A^B$ следующим образом: если $B$ имеет нулевую дробную часть, то вызывается `power_2(A, N)`, где $N$ — переменная целого типа, равная числу $B$; иначе вызывается `power_1(A, B)`. С помощью `power_3` найти $A^P$, $B^P$, $C^P$, если даны числа $P$, $A$, $B$, $C$. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert power_3(2, 0)==1, \"Test 1\"\n", "assert power_3(2, 2)==4, \"Test 2\"\n", "assert power_3(2, 2.1)==4.2870938501451725, \"Test 3\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func52.** Описать функцию `is_leap_year(Y)` логического типа, которая возвращает `True`, если год `Y` (целое положительное число) является високосным, и `False` в противном случае. Вывести значение функции `is_leap_year` для пяти данных значений параметра `Y`. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Совет.* Решение записывается в одну строчку. Используйте логическое выражение. Если трудно самостоятельно вывести решение, в интернете можно найти алгоритм вычисления високосного года." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert is_leap_year(2001)==False, \"Test 1\"\n", "assert is_leap_year(2020)==True, \"Test 2\"\n", "assert is_leap_year(1852)==True, \"Test 3\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func53.** Используя функцию `is_leap_year` из задания **Func52**, описать функцию `month_days(M, Y)` целого типа, которая возвращает количество дней для $M$-го месяца года $Y$ ($1 ≤ M ≤ 12$, $Y > 0$ — целые числа). Вывести значение функции `month_days` для данного года $Y$ и месяцев $M_1$, $M_2$, $M_3$. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Подсказка.* Удобно использовать перечислимый тип данных. Вместо проверки с использованием условного оператора можно использовать проверку вхождения во множество перечисленных значений. Например, чтобы проверить, что значение переменной `m` равно одному из заданных, вместо\n", "\n", "`m==1 or m==2 or m==12 or m==24`\n", "\n", "удобнее написать\n", "\n", "`m in [1,2,12,24]`\n", "\n", "Результат будет булевского типа: `True` или `False`.\n", "\n", "Без условного оператора, тем не менее, при решении этой задачи не обойтись." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert month_days(2,2004)==29, \"Test 1\"\n", "assert month_days(6,2004)==30, \"Test 2\"\n", "assert month_days(8,2004)==31, \"Test 3\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func54.** Используя функцию `month_days` из задания **Func53**, описать функцию `prev_date(D, M, Y)`, которая по информации о правильной дате, включающей день $D$, номер месяца $M$ и год $Y$, определяет предыдущую дату и возвращает новые значения дня, месяца и года (все данные — целые). Применить функцию `prev_date` к трем исходным датам и вывести полученные значения предыдущих дат. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Подсказка.* Работаем через условный оператор, используя функцию из прошлого задания для учета всевозможных вариантов." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "assert prev_date(9,5,1995)==(8,5,1995), \"Test 1\"\n", "assert prev_date(1,8,1750)==(31,7,1750), \"Test 2\"\n", "assert prev_date(1,1,2020)==(31,12,2019), \"Test 3\"\n", "\n", "# напишите еще сами два интересных теста!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Func55.** Используя функцию `month_days` из задания **Func53**, описать функцию `next_date(D, M, Y)`, которая по информации о правильной дате, включающей день $D$, номер месяца $M$ и год $Y$, определяет следующую дату и возвращает новые значения дня, месяца и года (все данные — целые). Применить функцию `next_date` к трем исходным датам и вывести полученные значения следующих дат. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#описание функции\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#основная программа\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# тестирование функции\n", "\n", "# напишите тесты сами, аналогично предыдущему заданию!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }