Классы

Класс — это тип данных, определяющий свойства и поведение некоторой сущности. Свойства определяются атрибутами (переменными), а поведение — методами.

Разберите следующий пример. Какие определены классы? Какие атрибуты они содержат? Какие методы реализованы? Какие созданы экземпляры классов?

class Wheel:
    def __init__(self):
        self.is_good = True

    def puncture(self):
        self.is_good = False


class Car:
    def __init__(self, wheel_count):
        self.wheels = []
        for _ in range(wheel_count):
            self.wheels.append(Wheel())

    def drive(self):
        if self.is_good():
            print('Driving')
        else:
            print('Car is broken')

    def is_good(self):
        for wheel in self.wheels:
            if not wheel.is_good:
                return False
        return True


car = Car(4)
car.drive()
car.wheels[0].puncture()
car.drive()

Задание 1

Разработайте программу для ухода за виртуальным домашним животным. Состояние и поведение животного оформите в класс Pet. Определите данные, которые будут характеризовать потребности животного. Например, голод, радость, сон. Пусть каждый параметр принимает значения от 0 до 100, где 100 — отсутствие потребности, 0 — острая необходимость.

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

Для вычисления значения текущих характеристик будет удобно хранить время последнего обновления состояния животного. Для получения текущего времени воспользуйтесь вспомогательной функцией cur_time.

Создайте меню для ухода за животным, пусть оно включает пункты, соответствующие потребностям: «Покормить», «Поиграть» и другие. Пусть для простоты потребности восполняются моментально до максимального уровня.

На каждом шаге следует выводить изображение животного и его состояние.

Используйте заготовку:

import textwrap
from time import time


def cur_time():
    return int(time())


class Pet:
    def __str__(self):
        view = textwrap.dedent(r"""
              |\---/|
              | ,_, |
               \_`_/-..----.
            ___/ `   ' ,""+ \
           (__...'   __\    |`.___.';
             (_,...'(_,.`__)/'.....+
            """)
        return view


def main():
    pass


if __name__ == '__main__':
    main()

Задание 2

Разработайте простой планировщик. Создайте классы Event и Calendar. Пусть событие содержит описание, а также дату и время начала и окончания. Календарь включает в себя список событий и методы для управления ими. Создайте меню со следующими пунктами:

  1. Добавить мероприятие

  2. Удалить мероприятие

  3. Показать все мероприятия

  4. Показать мероприятия на день

  5. Показать мероприятия на сегодня

  6. Выход

Для работы с датой и временем импортируйте функции:

from datetime import date, datetime