Коротко: здесь 18 задач по Python для 7–9 класса — от input() до сортировки списка, от простых к более сложным. К каждой есть условие, решение, настоящий вывод программы с конкретным вводом и одна ошибка, на которой спотыкаются чаще всего. Каждое решение мы запустили перед публикацией, так что код можно копировать как есть.
Сначала прочитай условие и напиши свой вариант, а потом сверь его с нашим. Устанавливать Python для этого тебе не обязательно: подойдет Python онлайн в браузере. В блоке «Запуск» то, что стоит после вопроса программы, набрано с клавиатуры.
| Тема | Задачи | Что тренирует |
|---|---|---|
| Ввод, вывод, переменные | 1–4 | input(), int(), float(), // и % |
| Условия | 5–8 | if, elif, else, and, or |
| Циклы for и while | 9–12 | range(), счетчики, break |
| Строки | 13–15 | срезы, lower(), split() |
| Списки | 16–18 | append(), обход, сортировка |
Ввод, вывод и переменные: задачи 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 лет. Там после таких задач из тех же условий, циклов и списков собирают мини-проекты «Угадай число» и «Адресная книга».