← до розділу
>>> import python

Python за вечір

Курс для тих, хто тільки починає або хоче швидко згадати мову. Кожна тема – спершу простими словами, далі приклади, типова помилка й задачі від легкої до складнішої.

Код можна міняти й запускати прямо тут: Python працює у вашому браузері, нічого встановлювати не треба. Перший запуск завантажує Python – від кількох секунд до пів хвилини, далі все миттєво.

Запустити – виконати кодCtrl+Enter – те саме з клавіатуриСкинути – повернути початковий кодПеревірити – у задачах

Розділ 1Змінні й типи

Простими словами

Змінна – це ярлик із назвою, який ми чіпляємо на значення: vik = 15 означає «ярлик vik тепер на числі 15». Кожне значення має тип – що це за дані: ціле число, дробове, текст, «так/ні».

Тип визначає, що з даними можна робити: числа додають, текст склеюють. "5" + 5 – помилка, бо Python не знає, чи ви хочете 10, чи «55».

Основні типи

Арифметика: три ділення

/ – звичайне ділення, завжди дає дріб. // – ціла частина (скільки цілих разів уміщається). % – остача. Разом вони відповідають на питання «скільки повних коробок і скільки лишилось».

Перетворення типів

input() завжди повертає текст, навіть якщо людина ввела цифри. Тому перед рахунком текст перетворюють: int(...), float(...). Назад у текст – str(...).

Типова помилка: 0.1 + 0.2 == 0.3 дає False. Дробові числа в комп'ютері зберігаються наближено. Порівнюйте з допуском: abs(a - b) < 1e-9 або округлюйте round(x, 2).

Розминка Наступне число

Прочитайте ціле число й виведіть наступне. Для 14 → 15.

Підказка 1

input() дає текст, тому спершу int(...) – це вже зроблено в першому рядку.

Підказка 2

Залишилося надрукувати n + 1.

Відповідь
n = int(input())
print(n + 1)

Легка Хвилини в години

Програма отримує кількість хвилин. Виведіть години й хвилини через пробіл. Для 125 → 2 5.

Підказка 1

Скільки повних годин у 125 хвилинах? Це ділення націло: m // 60.

Підказка 2

А скільки хвилин лишилося понад повні години? Це остача: m % 60.

Відповідь
m = int(input())
print(m // 60, m % 60)

Середня Сума цифр чотирицифрового числа

Без перетворення в текст, лише // і %. Для 1234 → 10.

Підказка 1

Остання цифра числа – це остача від ділення на 10: 1234 % 10 → 4.

Підказка 2

Перша цифра – n // 1000. Друга – відкиньте дві останні (n // 100) і візьміть остачу на 10.

Відповідь
n = int(input())
print(n // 1000 + n // 100 % 10 + n // 10 % 10 + n % 10)

Розділ 2Рядки й f-рядки

Простими словами

Рядок – це ланцюжок символів, кожен має номер (індекс) починаючи з нуля. Від'ємні номери рахують з кінця: -1 – останній символ.

Зріз s[від:до] вирізає шматок; «до» не входить. Третє число – крок: s[::-1] читає з кінця.

Найпотрібніші методи

f-рядки: вставити значення в текст

Літера f перед лапками дозволяє писати змінні у фігурних дужках. Після двокрапки – формат: скільки знаків після коми, ширина поля, вирівнювання.

Типова помилка: s[0] = "д" – рядки незмінні. Створюйте новий: s = "д" + s[1:].

Розминка Привітання

Прочитайте ім'я й виведіть привітання f-рядком. Для «Оля» → Привіт, Оля!.

Підказка 1

f-рядок – це f"...", а змінна стоїть у фігурних дужках.

Підказка 2

Порівняйте з прикладом розділу: print(f"Привіт, {imia}!").

Відповідь
imia = input()
print(f"Привіт, {imia}!")

Легка Ініціали

Ім'я та прізвище через пробіл → ініціали з крапками: «Тарас Шевченко» → Т.Ш.

Підказка 1

Розріжте рядок на два слова: imia, prizvyshche = input().split().

Підказка 2

Перша літера слова – індекс 0: imia[0]. Склейте все f-рядком з крапками.

Відповідь
imia, prizvyshche = input().split()
print(f"{imia[0]}.{prizvyshche[0]}.")

Середня Паліндром

Виведіть True, якщо фраза читається однаково з обох боків (без пробілів і регістру).

Підказка 1

Спершу приберіть різницю між великими й малими літерами (.lower()) і пробіли (.replace(" ", "")).

Підказка 2

Рядок навпаки – зріз t[::-1]. Паліндром – коли він дорівнює самому рядку.

Відповідь
t = input().lower().replace(" ", "")
print(t == t[::-1])

Розділ 3Умови if

Простими словами

if – розвилка: «якщо умова правдива, виконай цей блок». Блок – рядки з відступом (4 пробіли). Відступ у Python – не прикраса, а частина синтаксису: він показує, що належить до if.

elif – «а якщо ні, то перевір ось це», else – «в усіх інших випадках». Спрацьовує лише перша правдива гілка.

Коротші записи умов

and, or, not

and – обидві умови; or – хоч одна; not – навпаки. Python перевіряє зліва направо й зупиняється, щойно відповідь ясна, тому x != 0 and 10 / x > 1 не впаде при x = 0.

Що вважається «хибним». У перевірках if як «ні» сприймаються: 0, 0.0, порожній текст "", порожні [], (), {}, None, False. Усе інше – «так». Тому досвідчені пишуть if spysok: замість if len(spysok) > 0:.
Типова помилка: if x == 1 or 2: – завжди правда, бо читається як (x == 1) or 2, а 2 – «так». Правильно: if x in (1, 2):.

Розминка Знак числа

Виведіть додатне, від'ємне або нуль.

Підказка 1

Три варіанти – це if, elif, else.

Підказка 2

Перевірте n > 0, потім n < 0; усе інше – нуль.

Відповідь
n = int(input())
if n > 0:
    print("додатне")
elif n < 0:
    print("від'ємне")
else:
    print("нуль")

Середня Високосний рік

Рік високосний, якщо ділиться на 4, але не на 100 – або ділиться на 400. Виведіть так чи ні.

Підказка 1

«Ділиться на 4» – це r % 4 == 0; «не ділиться на 100» – r % 100 != 0.

Підказка 2

Склейте: (на 4 і не на 100) або на 400. and виконується раніше за or, тож дужки можна не ставити.

Відповідь
r = int(input())
if r % 4 == 0 and r % 100 != 0 or r % 400 == 0:
    print("так")
else:
    print("ні")

Розділ 4Тернарний оператор: if в один рядок

Простими словами

Коли треба вибрати одне з двох значень, не пишуть чотири рядки. Форма:

ЯКЩО_ТАК if УМОВА else ЯКЩО_НІ

Читайте як українське речення: «"бюджет", якщо балів ≥ 160, інакше "контракт"». Результат – значення, яке можна присвоїти, надрукувати, вставити в f-рядок.

Чотири рядки

Один рядок

or і and як короткі підстановки

Вибір через індекс і через словник

Індекс за умовою. True і False у Python – це 1 і 0. Тому умову можна поставити в квадратні дужки як номер: (ЯКЩО_НІ, ЯКЩО_ТАК)[УМОВА]. Зверніть увагу: варіант «ні» стоїть першим, бо False – це індекс 0.

Словник замість ланцюжка if. Коли варіантів багато й вибір іде за значенням, словник «ключ → відповідь» читається краще за п'ять elif. Метод get дає запасну відповідь для ключа, якого немає.

Головна пастка обох способів: Python обчислює усі варіанти заздалегідь, а потім вибирає один. (0, 10 / x)[x != 0] при x = 0 впаде з діленням на нуль, хоч ви й «вибирали» нуль. Тернарний 10 / x if x != 0 else 0 рахує лише потрібну гілку – тому для обчислень, що можуть зламатися, беріть його. Індекс і словник – для готових значень: текстів, чисел, назв.

Легка Менше з двох без if

Два числа в рядку. Виведіть менше, вибравши його індексом за умовою (…, …)[умова]. Для «5 9» → 5.

Підказка 1

Умова a < b дає True (1) або False (0) – це номер у парі.

Підказка 2

Коли a < b хибне (індекс 0), менше – b. Отже, пара (b, a).

Відповідь
print((b, a)[a < b])
Типова помилка: kilkist = n or 10 замінить і чесний нуль на 10. Якщо 0 допустимий, пишіть 10 if n is None else n. І не будуйте ланцюжки з трьох і більше умов – їх важко читати, звичайний if/elif кращий.

Розминка Більше з двох

Два числа в рядку. Виведіть більше одним рядком з тернарним оператором. Для «8 3» → 8.

Підказка 1

Форма: ЯКЩО_ТАК if УМОВА else ЯКЩО_НІ.

Підказка 2

print(a if a > b else b).

Відповідь
a, b = map(int, input().split())
print(a if a > b else b)

Легка Парне чи непарне

Одним рядком з тернарним оператором виведіть парне або непарне.

Підказка 1

Число парне, коли остача від ділення на 2 дорівнює нулю: n % 2 == 0.

Підказка 2

Форма: "парне" if УМОВА else "непарне" – і все це в print(...).

Відповідь
n = int(input())
print("парне" if n % 2 == 0 else "непарне")

Середня Рівень за 12-бальною шкалою без if

1–3 «початковий», 4–6 «середній», 7–9 «достатній», 10–12 «високий». Підказка: індекс у списку.

Підказка 1

Список rivni уже дано: індекс 0 – «початковий», 1 – «середній» і так далі. Треба лише порахувати індекс.

Підказка 2

Оцінки 1–3 мають дати 0, 4–6 – 1… Спробуйте (o - 1) // 3 для o = 1, 3, 4, 12.

Відповідь
print(rivni[(o - 1) // 3])

Розділ 5Цикли

Простими словами

for – «для кожного елемента з набору зроби…». while – «повторюй, доки умова правдива». Якщо відомо, скільки разів або по чому йти, беріть for; якщо невідомо, коли зупинитись, – while.

range(старт, стоп, крок) – послідовність чисел; стоп не входить: range(5) – це 0, 1, 2, 3, 4.

Що відбувається на кожному кроці

Найчастіше в циклах плутаються не в записі, а в тому, що лежить у змінних на кожному кроці. Простежте за програмою suma = 0, for i in range(1, 5): suma += i рядок за рядком:

крокisuma доsuma після
1101
2213
3336
44610

5 у range(1, 5) не входить, тому кроків чотири, а відповідь 10. Коли програма поводиться дивно, намалюйте таку таблицю в зошиті або додайте в цикл print(i, suma) – і побачите, де саме все пішло не так.

enumerate і zip – помічники циклу

enumerate дає номер разом з елементом. zip іде по двох списках паралельно, як застібка-блискавка.

while, break, continue

else у циклі

Блок else після for виконується, якщо цикл дійшов до кінця без break. Зручно для пошуку: «перебрав усе й не знайшов».

Типова помилка: вічний цикл while, бо змінна в умові не змінюється. І ще: не видаляйте елементи зі списку, по якому йде for – він пропускатиме сусідів.

Розминка Від 1 до n

Виведіть числа від 1 до n через пробіл. Для 5 → 1 2 3 4 5.

Підказка 1

range(1, n + 1) – бо кінець не входить.

Підказка 2

Друкуйте в рядок: print(i, end=" ") або одразу print(*range(1, n + 1)).

Відповідь
n = int(input())
print(*range(1, n + 1))

Легка Факторіал

Виведіть n! = 1·2·…·n. Для 5 → 120.

Підказка 1

Заведіть змінну-добуток f = 1 (не 0: множення на нуль усе зіпсує).

Підказка 2

Пройдіть циклом for i in range(2, n + 1) і щоразу множте: f *= i.

Відповідь
n = int(input())
f = 1
for i in range(2, n + 1):
    f *= i
print(f)

Середня Ялинка

Для n = 3 виведіть зірочки по центру: 1, 3, 5 у рядку (ширина 2n−1).

Підказка 1

У рядку номер i (від 0) зірочок 2 * i + 1: 1, 3, 5…

Підказка 2

Пробілів перед ними n - 1 - i. Рядок можна «помножити»: " " * 3 → три пробіли.

Відповідь
n = int(input())
for i in range(n):
    print(" " * (n - 1 - i) + "*" * (2 * i + 1))

Розділ 6Списки

Простими словами

Список – пронумерований ряд значень у квадратних дужках: [5, 3, 8]. Його можна змінювати: додавати, видаляти, сортувати. Індекси й зрізи – як у рядків.

sort() чи sorted()?

Копії й посилання

Типова помилка: a = a.sort() – після цього a дорівнює None. Або a.sort(), або a = sorted(a).

Розминка Найвища й найнижча

Оцінки через пробіл. Виведіть найвищу й найнижчу через пробіл. Для «8 11 3 12 7» → 12 3.

Підказка 1

Для списку є готові функції max(...) і min(...).

Підказка 2

print(max(ocinky), min(ocinky)).

Відповідь
ocinky = list(map(int, input().split()))
print(max(ocinky), min(ocinky))

Легка Середня оцінка

Оцінки в один рядок через пробіл. Виведіть середнє з двома знаками після коми. Для «8 11 3 12 7» → 8.20.

Підказка 1

Список оцінок уже є. Середнє – це сума, поділена на кількість: sum(ocinky) / len(ocinky).

Підказка 2

Два знаки після коми дає f-рядок: f"{x:.2f}".

Відповідь
print(f"{sum(ocinky) / len(ocinky):.2f}")

Середня Без повторів, порядок зберегти

«3 1 3 2 1 5» → 3 1 2 5.

Підказка 1

Ідіть по числах по черзі й додавайте до результату лише ті, яких ще не бачили.

Підказка 2

Що «вже бачили», зручно тримати в окремому наборі (можна в списку, з in; з множинами з розділу 10 – швидше).

Відповідь
bulo, rez = set(), []
for x in a:
    if x not in bulo:
        bulo.add(x)
        rez.append(x)
print(*rez)
# коротко: print(*dict.fromkeys(a))

Розділ 7Цикл в один рядок (включення)

Простими словами

Дуже часто цикл робить одне: збирає новий список із старого. Для цього є стислий запис:

[ЩО_КЛАСТИ for X in ЗВІДКИ if ЯКА_УМОВА]

Читайте зліва направо: «квадрат x – для кожного x з 0..9 – якщо x парне». Частина з if необов'язкова.

Звичайний цикл

Включення

Де ставити if

if після for – фільтр (відкинути зайві). Тернарний if … else перед for – перетворення (кожен елемент стає одним із двох значень).

Словники, множини, генератори

Правило: включення – для простих випадків. Якщо рядок не вміщується на екрані чи має два if і два for, звичайний цикл читається краще.

Розминка Квадрати

Виведіть квадрати чисел від 1 до n через пробіл, використавши включення. Для 4 → 1 4 9 16.

Підказка 1

Шаблон: [x * x for x in ЗВІДКИ].

Підказка 2

Звідки – range(1, n + 1); надрукувати – print(*список).

Відповідь
n = int(input())
print(*[x * x for x in range(1, n + 1)])

Легка Лише високі оцінки

Виведіть через пробіл оцінки ≥ 10, використавши включення.

Підказка 1

Шаблон включення: [ЩО for X in ЗВІДКИ if УМОВА]. Що кладемо – саму оцінку o.

Підказка 2

Умова – o >= 10. Надрукувати список через пробіл: print(*список).

Відповідь
print(*[o for o in ocinky if o >= 10])

Середня Довжини слів

Виведіть словник «слово: довжина» для різних слів рядка, слова – за абеткою. Словник – це пари «ключ: значення» у фігурних дужках; докладно – у розділі 11, тут досить прикладу «Словники, множини, генератори» вище.

Підказка 1

Різні слова за абеткою – sorted(set(slova)): set прибирає повтори, sorted упорядковує.

Підказка 2

Словник включенням пишуть у фігурних дужках з двокрапкою: {w: len(w) for w in …}.

Відповідь
print({w: len(w) for w in sorted(set(slova))})

Розділ 8Функції й лямбди

Простими словами

Функція – іменований шматок коду, який можна викликати багато разів з різними даними. def оголошує її, у дужках – параметри (вхід), return – результат (вихід).

Лямбда – мініфункція в один вираз без імені: lambda x: x * 2. Її передають туди, де потрібна «маленька інструкція», найчастіше в key= при сортуванні.

Лямбда в сортуванні

Правило: якщо лямбду хочеться назвати (f = lambda x: …) – пишіть def. Типова помилка: забули return – функція поверне None.

Розминка Подвоєння

Напишіть podviy(x), що повертає число, удвічі більше за x.

Підказка 1

Тіло функції – з відступом під def.

Підказка 2

Замість pass напишіть return x * 2.

Відповідь
def podviy(x):
    return x * 2

Легка Функція площі

Напишіть ploshcha(a, b), що повертає площу прямокутника.

Підказка 1

Функцію оголошують def ploshcha(a, b):, а тіло пишуть з відступом.

Підказка 2

Не друкуйте всередині – поверніть результат: return a * b.

Відповідь
def ploshcha(a, b):
    return a * b

Середня Сортування слів

За довжиною, а слова однакової довжини – за абеткою. Через пробіл. Ключ може бути парою в дужках, наприклад (len(w), w): такі пари (кортежі) – розділ 9, тут досить знати, що порівнюються спершу перші числа.

Підказка 1

Python порівнює пари (довжина, слово) спершу за першим числом, а за рівності – за другим.

Підказка 2

Тож ключ сортування – key=lambda w: (len(w), w).

Відповідь
print(*sorted(slova, key=lambda w: (len(w), w)))

Розділ 9Кортежі й розпакування

Простими словами

Кортеж – список, який не можна змінити: (3, 4). Береться для записів фіксованої форми: координата, дата, рядок таблиці. Бо незмінний – його можна зробити ключем словника чи покласти в множину.

Розпакування – розкласти значення по змінних одним рядком: x, y = (3, 4).

Типова помилка: t[0] = 1 → TypeError. Потрібно змінювати – беріть список.

Розминка Мінімум і максимум разом

Числа через пробіл. Покладіть найменше й найбільше у дві змінні одним рядком і виведіть їх. Для «3 9 1 7» → 1 9.

Підказка 1

Праворуч можна записати два значення через кому – Python складе з них кортеж.

Підказка 2

mn, mx = min(a), max(a) – і надрукувати обидві.

Відповідь
a = list(map(int, input().split()))
mn, mx = min(a), max(a)
print(mn, mx)

Розминка Відстань до початку координат

Точка задана двома числами в рядку. Розпакуйте їх у x, y і виведіть відстань до точки (0, 0) з одним знаком після коми. Для «3 4» → 5.0.

Підказка 1

Розпакування з рядка: x, y = map(float, input().split()).

Підказка 2

Відстань – (x ** 2 + y ** 2) ** 0.5; один знак – f"{d:.1f}".

Відповідь
x, y = map(float, input().split())
d = (x ** 2 + y ** 2) ** 0.5
print(f"{d:.1f}")

Легка Обмін

Прочитайте два числа й виведіть їх у зворотному порядку, обмінявши значення змінних одним рядком.

Підказка 1

Розпакування обмінює змінні без третьої: праворуч складається пара, ліворуч розкладається.

Підказка 2

Один рядок: a, b = b, a.

Відповідь
a, b = b, a

Розділ 10Множини

Простими словами

Множина – «мішок» різних значень: повтори зникають, порядку немає. Головна сила – миттєва перевірка «чи є таке» (x in s) навіть серед мільйона елементів, і операції як у математиці: об'єднання, перетин, різниця.

Розминка Скільки різних

Слова через пробіл. Виведіть, скільки серед них різних. Для «кіт пес кіт рибка пес» → 3.

Підказка 1

Множина сама прибирає повтори: set(slova).

Підказка 2

Кількість – len(...).

Відповідь
slova = input().split()
print(len(set(slova)))

Розминка Чи є повтор

Числа через пробіл. Виведіть так, якщо якесь число повторюється, інакше ні.

Підказка 1

Якщо повтори є, множина буде коротшою за список.

Підказка 2

Порівняйте len(set(a)) з len(a) і виберіть «так» або «ні».

Відповідь
a = input().split()
print("так" if len(set(a)) < len(a) else "ні")

Легка Спільні літери

Два слова в двох рядках. Виведіть спільні літери (у нижньому регістрі) за абеткою, без пробілів. Для «Дрогобич» і «Борислав» це биор.

Підказка 1

Перетворіть кожне слово на множину літер: set(a). Не забудьте .lower(), щоб «Д» і «д» були однакові.

Підказка 2

Спільне – перетин &; за абеткою – sorted; склеїти без пробілів – "".join(...).

Відповідь
print("".join(sorted(set(a) & set(b))))

Розділ 11Словники

Простими словами

Словник – таблиця «ключ → значення», як справжній словник «слово → переклад» чи журнал «учень → оцінка». За ключем значення знаходиться миттєво. Ключі унікальні; порядок додавання зберігається.

Підрахунок – найчастіша задача

Типова помилка: bal["Петро"] для відсутнього ключа – KeyError. Перевіряйте in або беріть get.

Розминка Телефонна книга

Ім'я в рядку. Виведіть номер із книги або немає, якщо такого імені нема.

Підказка 1

knyha["Марко"] впаде з помилкою – для відсутнього ключа беріть get.

Підказка 2

knyha.get(imia, "немає") поверне запасну відповідь сама.

Відповідь
knyha = {"Оля": "067-111", "Іван": "050-222", "Петро": "093-333"}
imia = input()
print(knyha.get(imia, "немає"))

Середня Найчастіше слово

Виведіть слово, що трапляється найчастіше, і скільки разів. Якщо таких кілька – перше за абеткою.

Підказка 1

Порахуйте кожне слово в словнику: lich[w] = lich.get(w, 0) + 1.

Підказка 2

Найчастіше, а за рівності – перше за абеткою: min(lich, key=lambda w: (-lich[w], w)) – мінус робить «більше» «меншим».

Відповідь
lich = {}
for w in slova:
    lich[w] = lich.get(w, 0) + 1
naikrashche = min(lich, key=lambda w: (-lich[w], w))
print(naikrashche, lich[naikrashche])

Розділ 12Помилки й try/except

Простими словами

Помилка під час роботи програми (виняток) – це сигнал «далі так не можна»: ділення на нуль, «abc» замість числа, ключа немає в словнику. Без обробки програма зупиняється й друкує червоне повідомлення.

try – «спробуй виконати», except – «а якщо сталася ось така помилка, зроби інакше». Програма не падає, а йде далі.

Перехопити помилку

Назва після except – тип помилки. Найчастіші: ValueError (не те значення: int("abc")), ZeroDivisionError (ділення на нуль), KeyError (немає ключа), IndexError (немає такого індексу), TypeError (не той тип: "5" + 5).

Кілька винятків, else і finally

Підняти свою помилку: raise

Функція, яка отримала неможливі дані, не повинна мовчки повертати дурницю. Вона піднімає помилку з поясненням – а той, хто викликав, вирішує, що робити.

Типова помилка: голий except: без назви ловить усе підряд – і помилки у вашому власному коді теж, тож ви їх ніколи не побачите. Завжди пишіть, яку саме помилку чекаєте. І не загортайте в try пів програми – лише рядок, який справді може впасти.

Розминка Число чи ні

Прочитайте рядок. Якщо це ціле число – виведіть його подвоєним, інакше не число. Для «21» → 42.

Підказка 1

Перетворення int(t) загорніть у try.

Підказка 2

Помилка перетворення – except ValueError:, і в ній друкуйте «не число».

Відповідь
t = input()
try:
    print(int(t) * 2)
except ValueError:
    print("не число")

Середня Безпечне ділення

Два числа в рядку. Виведіть частку з двома знаками; якщо ділити на нуль – на нуль не можна. Для «7 2» → 3.50.

Підказка 1

Ділення на нуль піднімає ZeroDivisionError.

Підказка 2

У try – print(f"{a / b:.2f}"), в except ZeroDivisionError: – повідомлення.

Відповідь
a, b = map(float, input().split())
try:
    print(f"{a / b:.2f}")
except ZeroDivisionError:
    print("на нуль не можна")

Розділ 13Класи й об'єкти

Простими словами

Клас – це креслення, об'єкт – річ, зроблена за кресленням. Клас «Учень» описує, що в кожного учня є (ім'я, оцінки) і що він уміє (порахувати середній бал). Учні Оля й Тарас – два окремі об'єкти: в кожного свої оцінки.

Дані об'єкта – атрибути, його вміння – методи (функції всередині класу). Ви вже користувалися об'єктами: "текст".upper() і spysok.append(5) – це методи вбудованих класів str і list.

Перший клас

Як об'єкт себе показує: __str__

Без підказки print(olia) надрукує щось на кшталт <Uchen object at 0x…>. Метод __str__ каже, як перетворити об'єкт на текст.

Спадкування: «як той, але ще й…»

Типова помилка: забули self – у параметрах методу (def dodaty(o): → «takes 1 positional argument but 2 were given») або перед атрибутом (ocinky.append(o) замість self.ocinky.append(o) → NameError). self – це спосіб методу дістати «свій» об'єкт.

Розминка Прямокутник

Допишіть метод ploshcha, що повертає площу. Pryamokutnyk(3, 4).ploshcha() → 12.

Підказка 1

Сторони лежать в атрибутах об'єкта: self.a і self.b.

Підказка 2

Замість pass: return self.a * self.b.

Відповідь
class Pryamokutnyk:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def ploshcha(self):
        return self.a * self.b

Середня Банківський рахунок

Клас Rakhunok: на початку баланс 0; popovnyty(suma) додає гроші; znyaty(suma) знімає, а якщо грошей не вистачає – піднімає ValueError. Атрибут – balans.

Підказка 1

У __init__: self.balans = 0. Поповнення – self.balans += suma.

Підказка 2

У znyaty спершу перевірка: if suma > self.balans: raise ValueError("недостатньо коштів"), і лише потім віднімання.

Відповідь
class Rakhunok:
    def __init__(self):
        self.balans = 0

    def popovnyty(self, suma):
        self.balans += suma

    def znyaty(self, suma):
        if suma > self.balans:
            raise ValueError("недостатньо коштів")
        self.balans -= suma

Розділ 14Секрети Python

Простими словами

Те, що досвідчені пишуть машинально, а новачки роблять у п'ять рядків. Кожен прийом – не магія, а скорочення того, що ви вже вмієте.

Розпакування й зірочка

Вбудовані помічники

collections: Counter і defaultdict

Моржовий оператор := і сортування за кількома ключами

Правило: секрет хороший, коли код стає зрозумілішим. Якщо однокласник не прочитає ваш рядок з першого разу – розпишіть по-простому.

Середня Найчастіше – одним рядком

Слова через пробіл. Виведіть найчастіше слово й скільки разів, через пробіл, використавши Counter. Для «кіт пес кіт рибка пес кіт» → кіт 3.

Підказка 1

Counter(slova).most_common(1) поверне список з однієї пари [(слово, скільки)].

Підказка 2

Розпакуйте: slovo, k = Counter(slova).most_common(1)[0].

Відповідь
from collections import Counter
slova = input().split()
slovo, k = Counter(slova).most_common(1)[0]
print(slovo, k)

Легка Чи всі парні

Числа через пробіл. Виведіть так, якщо всі парні, інакше ні – одним рядком з all.

Підказка 1

all(УМОВА for x in a) – чи умова правдива для кожного.

Підказка 2

Умова парності – x % 2 == 0; «так»/«ні» – тернарним оператором.

Відповідь
a = list(map(int, input().split()))
print("так" if all(x % 2 == 0 for x in a) else "ні")

Розділ 15Підводні камені й шпаргалка

Запустіть – і подивіться, що піде не так.

Ще кілька каменів

Головне правило каменів: якщо результат здивував – не вгадуйте, а надрукуйте проміжні значення (print(f"{x=}")) і перевірте на маленькому прикладі в пісочниці.

Що коли брати

ТипПорядокЗміннийПовториЗаписКоли
listтактактак[1, 2]ряд значень, що змінюється
tupleтакнітак(1, 2)запис фіксованої форми, ключ
setнітакні{1, 2}унікальні, швидке in
dictтактакключі – ні{"a": 1}пошук за ключем, підрахунок
strтакнітак"ab"текст

Підсумкова Друге за величиною

Перший рядок – n, другий – n чисел. Виведіть друге за величиною різне число; якщо його немає – немає. Для «3 9 1 9 4» → 4.

Підказка 1

Різні числа – set(a); від більшого до меншого – sorted(…, reverse=True).

Підказка 2

Друге за величиною – індекс 1. Якщо різних чисел лише одне, індексу 1 немає – виведіть «немає».

Відповідь
rizni = sorted(set(a), reverse=True)
print(rizni[1] if len(rizni) > 1 else "немає")