Коротко: здесь 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)

Запуск:

Слово: Программирование
Гласных: 7

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

Задача 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() режет только по пробелам, и в «Люблю программировать!» слово «программировать!» будет длиной 16 символов вместе с восклицательным знаком. Если тебе нужны только буквы, убери знаки через 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 лет. Там после таких задач из тех же условий, циклов и списков собирают мини-проекты «Угадай число» и «Адресная книга».