Коротко: тут 18 задач з Python для 7–9 класу — від input() до сортування списку, від простих до складніших. До кожної є умова, розв'язок, справжній вивід програми з конкретним вводом і одна помилка, на якій спотикаються найчастіше. Кожен розв'язок ми запустили перед публікацією, тож код можна копіювати як є.

Спершу прочитай умову й напиши свій варіант, а потім звір його з нашим. Встановлювати Python для цього тобі не обов'язково: підійде Python онлайн у браузері. У блоці «Запуск» те, що стоїть після питання програми, набрано з клавіатури.

ТемаЗадачіЩо тренує
Введення, виведення, змінні1–4input(), int(), float(), // і %
Умови5–8if, elif, else, and, or
Цикли for і while9–12range(), лічильники, break
Рядки13–15зрізи, lower(), split()
Списки16–18append(), обхід, сортування

Введення, виведення і змінні: задачі 1–4

Тут усе тримається на трьох речах. input() завжди повертає рядок. int() і float() роблять з нього число. А // і % дають цілу частину й остачу від ділення — без них ти не розв'яжеш жодної задачі на цифри.

Задача 1. Привітання з віком

Програма питає в тебе ім'я та вік і виводить, скільки тобі буде через 5 років.

name = input("Як тебе звати? ")
age = int(input("Скільки тобі років? "))
print(f"Привіт, {name}! Через 5 років тобі буде {age + 5}.")

Запуск:

Як тебе звати? Оля
Скільки тобі років? 13
Привіт, Оля! Через 5 років тобі буде 18.

Де помиляються: забувають int(): тоді в тебе вік лишається рядком «13», і age + 5 падає з TypeError: can only concatenate str (not "int") to str.

Задача 2. Площа і периметр прямокутника

Введи довжину й ширину в сантиметрах (можна дробові) і виведи площу та периметр.

a = float(input("Довжина, см: "))
b = float(input("Ширина, см: "))
print("Площа:", a * b, "см²")
print("Периметр:", 2 * (a + b), "см")

Запуск:

Довжина, см: 4.5
Ширина, см: 2
Площа: 9.0 см²
Периметр: 13.0 см

Де помиляються: дріб вводять через кому. 4,5 дає ValueError: could not convert string to float: '4,5' — Python розуміє тільки крапку, навіть якщо твій комп'ютер налаштований на кому.

Задача 3. Секунди в години, хвилини й секунди

Дано кількість секунд. Виведи, скільки це годин, хвилин і секунд.

t = int(input("Секунд: "))
h = t // 3600
m = t % 3600 // 60
s = t % 60
print(f"{h} год {m} хв {s} с")

Запуск:

Секунд: 3725
1 год 2 хв 5 с

Де помиляються: ділять через / замість //: 3725 / 3600 дає 1.0347222222222223, а не цілу годину. // — ділення націло, % — остача.

Задача 4. Сума цифр тризначного числа

Введи тризначне число. Виведи кожну цифру окремо і їхню суму.

n = int(input("Тризначне число: "))
a = n // 100
b = n // 10 % 10
c = n % 10
print("Цифри:", a, b, c)
print("Сума:", a + b + c)

Запуск:

Тризначне число: 472
Цифри: 4 7 2
Сума: 13

Де помиляються: середню цифру беруть як n % 100 — виходить 72, а не 7. Спершу треба відкинути останню цифру: n // 10, і вже потім % 10.

Умови if, elif, else: задачі 5–8

Синтаксис і порядок гілок докладно розібрано в довіднику з умов if та else, тут лише практика. Головне правило: Python виконує першу істинну гілку і далі не дивиться.

Задача 5. Парне чи непарне

Введи ціле число і скажи, парне воно чи ні.

n = int(input("Число: "))
if n % 2 == 0:
    print(n, "— парне")
else:
    print(n, "— непарне")

Запуски:

Число: 17
17 — непарне

Число: -4
-4 — парне

Де помиляються: пишуть if n % 2 = 0: з одним знаком рівності. Програма не запускається взагалі, а свіжий Python ще й підкаже: SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?. Один = — присвоєння, порівняння — ==.

Задача 6. Найбільше з трьох без max()

Введи три числа і знайди найбільше, не користуючись функцією max().

a = int(input("a = "))
b = int(input("b = "))
c = int(input("c = "))
biggest = a
if b > biggest:
    biggest = b
if c > biggest:
    biggest = c
print("Найбільше:", biggest)

Запуск:

a = 7
b = 15
c = 3
Найбільше: 15

Де помиляються: пишуть ланцюжок if a > b and a > c / elif b > a and b > c / else. На вводі 15, 15, 3 він виведе 3: 15 не більше за 15, обидві умови хибні, і спрацьовує else. Перевіряй розв'язок на однакових числах, і ти одразу побачиш цю дірку.

Задача 7. Високосний рік

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

year = int(input("Рік: "))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(year, "— високосний")
else:
    print(year, "— звичайний")

Запуски:

Рік: 2024
2024 — високосний

Рік: 1900
1900 — звичайний

Рік: 2000
2000 — високосний

Де помиляються: перевіряють лише year % 4 == 0. Тоді 1900 рік виходить високосним, хоча в ньому 365 днів.

Задача 8. Оцінка за 12-бальною шкалою

Введи шкільну оцінку від 1 до 12 і виведи рівень: 1–3 початковий, 4–6 середній, 7–9 достатній, 10–12 високий. На число поза шкалою — попередження.

mark = int(input("Оцінка: "))
if mark < 1 or mark > 12:
    print("Такої оцінки немає")
elif mark >= 10:
    print("Високий рівень")
elif mark >= 7:
    print("Достатній рівень")
elif mark >= 4:
    print("Середній рівень")
else:
    print("Початковий рівень")

Запуски:

Оцінка: 8
Достатній рівень

Оцінка: 13
Такої оцінки немає

Де помиляються: ставлять elif mark >= 4 вище за mark >= 10. Тоді 11 отримає «середній рівень»: до нижніх гілок черга вже не дійде.

Цикли for і while: задачі 9–12

for бери, коли ти знаєш, скільки буде повторів. while — коли цикл крутиться, доки щось не станеться. Як рахує range() і чому друге число не входить у діапазон — у статті про цикл for.

Задача 9. Таблиця множення

Введи число і виведи для нього таблицю множення від 1 до 10.

n = int(input("Число: "))
for i in range(1, 11):
    print(n, "x", i, "=", n * i)

Запуск:

Число: 7
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70

Де помиляються: якщо ти напишеш range(1, 10), загубиться рядок 7 x 10 = 70: друге число в range() до діапазону не входить.

Задача 10. Сума від 1 до n і сума парних

Введи n. Порахуй суму всіх чисел від 1 до n і окремо — суму парних серед них.

n = int(input("n = "))
total = 0
even = 0
for i in range(1, n + 1):
    total += i
    if i % 2 == 0:
        even += i
print("Сума 1..n:", total)
print("Сума парних:", even)

Запуск:

n = 10
Сума 1..n: 55
Сума парних: 30

Де помиляються: беруть range(n): він іде від 0 до n − 1, і для n = 10 сума виходить 45 замість 55.

Задача 11. Числа до нуля: кількість, сума, середнє

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

total = 0
count = 0
x = int(input("Число (0 — кінець): "))
while x != 0:
    total += x
    count += 1
    x = int(input("Число (0 — кінець): "))
print("Чисел:", count, "Сума:", total)
if count > 0:
    print("Середнє:", round(total / count, 2))

Запуск:

Число (0 — кінець): 5
Число (0 — кінець): 8
Число (0 — кінець): -3
Число (0 — кінець): 0
Чисел: 3 Сума: 10
Середнє: 3.33

Де помиляються: забувають другий input() усередині циклу. Тоді x ніколи не стає нулем, і програма крутиться без кінця — зупинити її ти зможеш тільки клавішами Ctrl+C.

Задача 12. Просте число

Перевір, чи є введене число простим, тобто ділиться лише на 1 і на себе.

n = int(input("n = "))
is_prime = n > 1
for d in range(2, n):
    if n % d == 0:
        is_prime = False
        break
if is_prime:
    print(n, "— просте")
else:
    print(n, "— не просте")

Запуски:

n = 29
29 — просте

n = 91
91 — не просте

n = 1
1 — не просте

Де помиляються: якщо ти почнеш з is_prime = True, отримаєш 1 — просте: для одиниці цикл не виконується жодного разу. Тому стартове значення — n > 1. А 91 підступне: схоже на просте, але це 7 × 13.

Рядки: задачі 13–15

Рядок ти можеш перебирати по літерах, як список, і різати зрізами. Методи lower(), replace() та split() зібрані в довіднику методів рядків.

Задача 13. Паліндром

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

s = input("Фраза: ")
clean = s.lower().replace(" ", "")
if clean == clean[::-1]:
    print("Паліндром")
else:
    print("Не паліндром")

Запуски:

Фраза: Я несу гусеня
Паліндром

Фраза: Python
Не паліндром

Де помиляються: пропускають lower(). «Я» і «я» для Python різні символи, і «Я несу гусеня» перевірку не пройде. [::-1] — зріз, що перевертає рядок.

Задача 14. Скільки голосних у слові

Введи слово і порахуй у ньому голосні літери.

word = input("Слово: ")
vowels = "аеєиіїоуюя"
count = 0
for ch in word.lower():
    if ch in vowels:
        count += 1
print("Голосних:", count)

Запуск:

Слово: Програмування
Голосних: 5

Де помиляються: перебирають word без lower(). Тоді програма в тебе пропустить велику літеру: в «Олена» вийде 2, а не 3.

Задача 15. Найдовше слово в реченні

Введи речення. Знайди найдовше слово і скажи, скільки в ньому літер.

text = input("Речення: ")
words = text.split()
longest = words[0]
for w in words:
    if len(w) > len(longest):
        longest = w
print("Найдовше:", longest, len(longest))

Запуск:

Речення: Я пишу код на Python щодня
Найдовше: Python 6

Де помиляються: забувають про розділові знаки: split() ріже тільки за пробілами, і в «Люблю програмувати!» слово «програмувати!» матиме 13 символів разом зі знаком оклику. Якщо тобі потрібні тільки літери, прибери знаки через replace().

Списки: задачі 16–18

У шкільних задачах часто просять обійтися без max(), min() і sorted(), щоб було видно сам алгоритм. Ми так і зробили. Методи списків — у довіднику зі списків і словників.

Задача 16. Середній бал

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

line = input("Оцінки: ")
marks = []
for x in line.split():
    marks.append(int(x))
print("Оцінок:", len(marks))
print("Середній бал:", round(sum(marks) / len(marks), 1))

Запуск:

Оцінки: 10 8 11 7 12
Оцінок: 5
Середній бал: 9.6

Де помиляються: якщо ти порахуєш sum(line.split()) одразу, отримаєш TypeError: unsupported operand type(s) for +: 'int' and 'str': split() повертає рядки, а не числа.

Задача 17. Максимум і мінімум без max() і min()

Знайди в списку найбільше й найменше число та їхні позиції (рахуємо з нуля).

nums = [3, -7, 12, 0, -2, 12]
big = nums[0]
small = nums[0]
for x in nums:
    if x > big:
        big = x
    if x < small:
        small = x
print("Максимум:", big, "на позиції", nums.index(big))
print("Мінімум:", small, "на позиції", nums.index(small))

Вивід:

Максимум: 12 на позиції 2
Мінімум: -7 на позиції 1

Де помиляються: стартують з big = 0. Для списку [-5, -2, -9] такий код виведе 0 — числа, якого в списку немає. Стартуй з першого елемента. І зауваж: index() повертає позицію першого збігу, тому друга 12 не врахована.

Задача 18. Сортування бульбашкою

Відсортуй список за зростанням, не користуючись sort() і sorted(): порівнюй сусідні елементи й міняй їх місцями.

a = [5, 1, 4, 2, 8]
n = len(a)
for i in range(n - 1):
    for j in range(n - 1 - i):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]
print(a)

Вивід:

[1, 2, 4, 5, 8]

Де помиляються: внутрішній цикл пускають до range(n). На останньому кроці a[j + 1] виходить за край списку: IndexError: list index out of range. Коли ти бачиш цю помилку в циклі по списку, першою перевіряй межу range().

Як перевірити свій розв'язок, якщо він не схожий на наш

Твій розв'язок може відрізнятися від нашого і при цьому бути правильним. Перевіряй його не на одному вводі, а на кількох, і обов'язково на незручних: 0, від'ємне число, два однакових значення, одне слово замість речення. Задачі 6, 12 і 17 тобі це покажуть: зламаний код на «гарному» вводі працює, а на крайньому — ні.

Якщо твоя програма впала з червоним текстом, читай останній рядок: там назва помилки й підказка. TypeError — переплутали рядок і число, ValueError — ввели не те, що можна перетворити, IndexError — вийшли за межі списку. Розбір цих та інших повідомлень — у статті про типові помилки новачків.

Ці теми відповідають першим модулям ступені «Python: Ігри та боти» для 10–14 років. Там після таких задач з тих самих умов, циклів і списків збирають міні-проєкти «Вгадай число» та «Адресна книга».