11. (П5) Написання та використання функцій у Python¶
Мета роботи¶
Навчитися оголошувати власні функції через def, передавати їм дані параметрами, повертати результат оператором return, користуватися значеннями за замовчуванням та іменованими аргументами й розбивати програму на функції з окремою main().
Персоналізація обов'язкова
Кожна функція має працювати з вашими справжніми даними: ім'ям, прізвищем, групою, роком народження, кількістю літер у прізвищі. Роботи з абстрактними x = 5, text = "abc" або з даними іншого студента не приймаються.
Підготовка¶
Кожне завдання виконуйте в окремому файлі: task1.py, task2.py, task3.py, task4.py.
Ваші персональні дані¶
Перш ніж почати, випишіть ці значення — вони знадобляться в усіх завданнях.
| Позначення | Звідки береться | Завдання |
|---|---|---|
name |
ваше ім'я латиницею | 1, 3, 4 |
surname |
ваше прізвище латиницею | 1, 3 |
group |
ваша група | 1, 4 |
y |
рік вашого народження | 1, 2 |
c |
кількість літер у вашому прізвищі латиницею | 3 |
n |
кількість літер у вашому імені латиницею (мінімум 3) | 4 |
| оцінки | ваші реальні бали за n предметів |
4 |
graph LR
P["Особисті дані<br/>name, surname, y, c"] --> A["Аргументи<br/>виклику"]
A --> F["def функція(параметри)"]
F --> R["return<br/>результат"]
R --> U["Використання<br/>в обчисленнях"]
U --> M["main()<br/>керує викликами"]
style P fill:#339af0,stroke:#333,color:#fff
style A fill:#ffd43b,stroke:#333,color:#000
style F fill:#ff922b,stroke:#333,color:#000
style R fill:#845ef7,stroke:#333,color:#fff
style U fill:#51cf66,stroke:#333,color:#000
style M fill:#ff6b6b,stroke:#333,color:#fff
Хід роботи¶
Завдання 1. Візитка: від функції без параметрів до функції з параметрами¶
Файл task1.py.
- Напишіть функцію
print_card()без параметрів, яка друкує ваше ім'я, прізвище, групу та рік народження. Викличте її тричі. -
Нижче напишіть другу функцію
print_card_args(name, surname, group, year)— ті самі дані, але передані параметрами. Викличте її трьома способами:- лише позиційними аргументами;
- лише іменованими аргументами (у довільному порядку);
- змішано: перші два позиційно, решта — за іменами.
-
Задайте параметру
groupзначення за замовчуванням (вашу групу) і покажіть виклик, у якому групу не передають. Пам'ятайте: параметри зі значеннями за замовчуванням стоять після звичайних. - Спробуйте викликати
print_card_args("Ivan")і запишіть точний текст помилки. - Спробуйте написати виклик
print_card_args(name="Ivan", "Petrenko")і запишіть, на якому етапі (запуск чи виконання) виникає помилка.
Приклад роботи програми:
Ivan Petrenko, PZ-11
--- no parameters, call 1 ---
Name: Ivan Petrenko
Group: PZ-11
Birth year: 2007
--- no parameters, call 2 ---
Name: Ivan Petrenko
Group: PZ-11
Birth year: 2007
--- no parameters, call 3 ---
Name: Ivan Petrenko
Group: PZ-11
Birth year: 2007
--- positional arguments ---
Ivan Petrenko, PZ-11, 2007
--- keyword arguments ---
Ivan Petrenko, PZ-11, 2007
--- default group ---
Ivan Petrenko, PZ-11, 2007
Завдання 2. print проти return¶
Файл task2.py.
-
Напишіть дві функції, які працюють з вашим роком народження
y:print_age(year)— друкує вік і нічого не повертає;get_age(year, current_year=2026)— вік повертає.
-
Викличте обидві. Виведіть
print(print_age(y))і поясніть, звідки в результаті взялосяNone. - Використайте результат
get_ageв обчисленнях: виведіть свій вік у місяцях і в тижнях. - Скориставшись параметром
current_year, обчисліть, скільки вам буде років у 2030. - Спробуйте зробити те саме з
print_age: напишітьprint_age(y) * 12. Запишіть точний текст помилки й поясніть її одним реченням. - Додайте до
get_ageперевірку на початку: якщоyearбільший заcurrent_yearабо від'ємний — функція одразу повертає-1(ранній вихід черезreturn). Перевірте це на значенні3000. - Після
returnуget_ageдопишіть рядокprint("after return")і поясніть, чому він не виконується.
Приклад роботи програми:
Ivan Petrenko, PZ-11
Age: 19
print_age returned: None
Age from get_age: 19
Age in months: 228
Age in weeks: 988
Age in 2030: 23
Invalid year 3000 gives: -1
Завдання 3. Бібліотека функцій для вашого прізвища¶
Файл task3.py.
Усі функції в цьому завданні мають анотації типів.
get_initials(name: str, surname: str) -> str— повертає ініціали у виглядіI.P..count_letters(text: str, letter: str = "a") -> int— повертає кількість входжень символуletterуtextбез урахування регістру. Другий параметр має значення за замовчуванням"a".count_vowels(text: str) -> int— повертає кількість голосних (a,e,i,o,u,y).reverse_text(text: str) -> str— повертає рядок у зворотному порядку (циклом, без зрізів).-
У основній частині програми:
- виведіть своє повне ім'я та ініціали;
- виведіть довжину прізвища
c, кількість голосних і приголосних (приголосні порахуйте через дві попередні функції, не пишучи третій цикл); - у циклі по рядку
"aeiou"виведіть, скільки разів кожна голосна трапляється у вашому прізвищі — використайтеcount_lettersз іменованим аргументом; - покажіть виклик
count_letters(surname)без другого аргументу; - виведіть перевернуте прізвище;
- додайте до
count_lettersdocstring і виведіть його черезcount_letters.__doc__, а анотації — черезcount_letters.__annotations__.
Приклад роботи програми:
Ivan Petrenko, PZ-11
Initials: I.P.
Letters in surname: 8
Vowels: 3, consonants: 5
a: 0
e: 2
i: 0
o: 1
u: 0
Default letter 'a': 0
Reversed surname: oknorteP
Docstring: Return how many times letter occurs in text.
Annotations: {'text': <class 'str'>, 'letter': <class 'str'>, 'return': <class 'int'>}
Завдання 4. Розбиття програми на функції¶
Файл task4.py.
Візьміть звіт про власні оцінки й побудуйте програму виключно з функцій: жодного коду верхнього рівня, крім визначень і одного виклику main().
read_grade(prompt)— цикломwhile Trueзапитує оцінку, доки не введено ціле число від0до100; повертає її. Некоректне введення пояснює користувачеві та запитує ще раз.to_letter(grade)— повертає буквену оцінку (A–F) за шкалою з практичної роботи 3. Використайте кількаreturnзамістьelif.average(grades)— повертає середнє арифметичне списку оцінок.count_above(grades, limit)— повертає, скільки оцінок більші заlimit.print_report(name, group, grades)— друкує звіт: список оцінок, середнє з двома знаками після коми та буквену оцінку, найкращий і найгірший бали, кількість оцінок вище середнього. Усередині викликаєaverage,to_letterіcount_above.main()— задає ваше ім'я та групу, у циклі читаєnоцінок (n— кількість літер у вашому імені, мінімум 3) і викликаєprint_report.- Останній рядок файлу —
main().
Вимоги: кожна функція має одну відповідальність (читає або рахує або друкує) і власний docstring.
Питання: порівняйте цю програму з аналогічною програмою без функцій із практичної роботи 4 — які три конкретні переваги ви бачите?
Приклад роботи програми:
Ivan Petrenko, PZ-11
Grade 1 (0-100): 90
Grade 2 (0-100): abc
Error: digits only
Grade 2 (0-100): 84
Grade 3 (0-100): 120
Error: the value must be between 0 and 100
Grade 3 (0-100): 77
Grade 4 (0-100): 95
--- Report ---
Student: Ivan Petrenko, group PZ-11
Grades: 90 84 77 95
Average: 86.50 -> B
Best: 95, worst: 77
Above average: 2
Що здати¶
- Файли
task1.py…task4.pyз власними даними. - Знімки екрана з виводом кожної програми (перший рядок виводу — ваше ім'я та група).
- Звіт із точними текстами помилок із завдань 1 і 2 та відповіддю на питання до завдання 4.
Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub