Python

Задачи на ООП Python

ООП в Python становится понятнее не после определений, а после маленьких классов: пользователь, счетчик, товар, банковский счет, задача

Здесь нет тяжелой теории. Каждая задача показывает, какие данные хранит объект и какие действия он умеет выполнять

Как работать с подборкой

Материал помогает связать class, __init__, self, атрибуты и методы с понятными примерами

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

После решения измените данные и запустите код снова. Так вы быстрее увидите, где программа привязана только к одному примеру

Задачи с решениями

Задача 1. Класс User

Условие: Создайте класс пользователя с именем и методом приветствия

Подсказка: self нужен, чтобы метод работал с данными конкретного объекта

Решение:

class User:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Привет, {self.name}"

user = User("Анна")
print(user.greet())

Проверка: Создайте двух пользователей и сравните приветствия

Задача 2. Счетчик

Условие: Создайте класс Counter с методами increase и reset

Подсказка: Состояние счетчика хранится в атрибуте объекта

Решение:

class Counter:
    def __init__(self):
        self.value = 0

    def increase(self):
        self.value += 1

    def reset(self):
        self.value = 0

counter = Counter()
counter.increase()
counter.increase()
print(counter.value)

Проверка: После двух increase значение должно быть 2

Задача 3. Товар со скидкой

Условие: Создайте класс Product с ценой и методом discounted_price

Подсказка: Метод может принимать процент скидки как аргумент

Решение:

class Product:
    def __init__(self, title, price):
        self.title = title
        self.price = price

    def discounted_price(self, percent):
        return self.price - self.price * percent / 100

product = Product("Курс", 5000)
print(product.discounted_price(20))

Проверка: Для 5000 и 20 результат должен быть 4000

Задача 4. Банковский счет

Условие: Создайте счет с пополнением и списанием

Подсказка: При списании проверьте, хватает ли денег

Решение:

class BankAccount:
    def __init__(self, balance=0):
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def withdraw(self, amount):
        if amount > self.balance:
            return "Недостаточно средств"
        self.balance -= amount
        return "Списание выполнено"

account = BankAccount(1000)
print(account.withdraw(300))
print(account.balance)

Проверка: Проверьте списание суммы больше баланса

Задача 5. Задача в списке дел

Условие: Создайте класс Task с названием и статусом done

Подсказка: Метод complete должен менять статус задачи

Решение:

class Task:
    def __init__(self, title):
        self.title = title
        self.done = False

    def complete(self):
        self.done = True

task = Task("Повторить классы")
task.complete()
print(task.done)

Проверка: Создайте две задачи с разными статусами

Задача 6. Корзина покупок

Условие: Создайте класс Cart, который хранит товары и считает итог

Подсказка: Внутри объекта удобно хранить список цен

Решение:

class Cart:
    def __init__(self):
        self.prices = []

    def add(self, price):
        self.prices.append(price)

    def total(self):
        return sum(self.prices)

cart = Cart()
cart.add(100)
cart.add(250)
print(cart.total())

Проверка: Проверьте пустую корзину

Задача 7. Книга

Условие: Создайте класс Book с автором, названием и методом description

Подсказка: Метод должен возвращать строку, а не печатать ее сразу

Решение:

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def description(self):
        return f"{self.author}: {self.title}"

book = Book("Python", "Автор")
print(book.description())

Проверка: Создайте список книг и выведите описания в цикле

Задача 8. Студент и средний балл

Условие: Создайте класс Student, который хранит оценки и считает среднее

Подсказка: Если оценок нет, верните 0

Решение:

class Student:
    def __init__(self, name):
        self.name = name
        self.grades = []

    def add_grade(self, grade):
        self.grades.append(grade)

    def average(self):
        if not self.grades:
            return 0
        return sum(self.grades) / len(self.grades)

student = Student("Иван")
student.add_grade(5)
student.add_grade(4)
print(student.average())

Проверка: Проверьте студента без оценок

Задача 9. Прямоугольник

Условие: Создайте класс Rectangle с методами area и perimeter

Подсказка: Ширина и высота должны храниться в объекте

Решение:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

rectangle = Rectangle(3, 4)
print(rectangle.area())
print(rectangle.perimeter())

Проверка: Для сторон 3 и 4 площадь должна быть 12, периметр 14

Задача 10. Плейлист

Условие: Создайте класс Playlist, который хранит песни и считает их количество

Подсказка: Список песен должен быть атрибутом объекта, а не общей переменной

Решение:

class Playlist:
    def __init__(self, title):
        self.title = title
        self.songs = []

    def add_song(self, song):
        self.songs.append(song)

    def count(self):
        return len(self.songs)

playlist = Playlist("Учебный")
playlist.add_song("Track 1")
playlist.add_song("Track 2")
print(playlist.count())

Проверка: Создайте два плейлиста и убедитесь, что песни не смешиваются

По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы

По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы

Как проверять свои решения

Для каждой задачи сделайте минимум три запуска: обычный пример, крайний пример и пример с неожиданными данными. Для чисел это может быть ноль или отрицательное значение, для строк — пустая строка, для списков — пустой список или повторяющиеся элементы

Если код работает, объясните его словами. Скажите, какие данные приходят на вход, что хранится в переменных, где меняется результат и почему программа останавливается

Частые ошибки новичков

  • читать решение, но не запускать его руками
  • менять сразу несколько строк и не понимать, какая из них сломала код
  • называть переменные одной буквой там, где можно написать понятное имя
  • забывать проверять пустые строки, пустые списки и ноль
  • путать вывод через print и возврат результата через return
  • оставлять код рабочим только для одного заранее выбранного примера

Дополнительные задачи

Задача 11. Класс TodoItem

Условие: Создайте задачу с названием и признаком выполнения

class TodoItem:
    def __init__(self, title):
        self.title = title
        self.done = False

    def complete(self):
        self.done = True

task = TodoItem("Выучить классы")
task.complete()
print(task.title, task.done)

Проверка: Добавьте метод reset, который возвращает задачу в состояние False

Задача 12. Класс Counter

Условие: Счетчик должен увеличиваться, уменьшаться и показывать текущее значение

class Counter:
    def __init__(self):
        self.value = 0

    def increment(self):
        self.value += 1

    def decrement(self):
        self.value -= 1

counter = Counter()
counter.increment()
counter.increment()
counter.decrement()
print(counter.value)

Проверка: Запретите счетчику уходить ниже нуля

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x