Модуль 25. Задача 6. Совместное проживание 2

Модуль 25. Задача 6. Совместное проживание 2

Артём увлёкся предыдущим экспериментом и решил расширить его, создав целую семью из Мужа, Жены и Кота. Условия эксперимента следующие.
Каждый день участники жизни могут делать только одно действие. Все вместе они должны прожить год и не умереть.

Муж может:

  • есть;
  • играть;
  • ходить на работу.

Жена может:

  • есть;
  • покупать продукты;
  • покупать шубу;
  • убираться в доме.

Кот может:

  • есть;
  • спать;
  • драть обои.

Все они живут в одном доме, дом характеризуется:

  • количеством денег в тумбочке (вначале 100);
  • количеством еды в холодильнике (вначале 50);
  • едой для кота (вначале 30);
  • количеством грязи (вначале 0).

У людей есть имя, степень сытости (вначале 30) и степень счастья (вначале 100). Все люди могут гладить кота (+5 к счастью).
У кота есть имя и степень сытости (вначале 30).
Любое действие (в том числе и кота), кроме «есть», приводит к уменьшению степени сытости на 10 пунктов.
Взрослые едят максимум по 30 единиц еды, степень сытости растёт на один пункт за один пункт еды.
Кот ест максимум по 10 единиц еды, степень сытости растёт на два пункта за один пункт еды.
Степень сытости не должна падать ниже нуля, иначе человек или кот умрёт от голода.
Деньги в тумбочку добавляет муж после работы — сразу 150 единиц.
Еда стоит 10 денег за 10 единиц еды. Шуба стоит 350 единиц.
Еда для кота тоже покупается — за 10 денег 10 еды.
Грязь добавляется каждый день по пять пунктов, за одну уборку жена может убирать до 100 единиц грязи.
Если кот дерёт обои, то грязи тоже становится больше на пять пунктов.
Если в доме грязи больше 90, у людей падает степень счастья каждый день на 10 пунктов.
Степень счастья растёт: у мужа от игры в компьютер (на 20), у жены от покупки шубы (на 60, но шуба дорогая).
Степень счастья не должна падать ниже 10, иначе человек умирает от депрессии.
Реализуйте такую программу. Подведите итоги жизни за год — сколько было заработано денег, сколько съедено еды, сколько куплено шуб.
Дополнительно: добавьте ещё ребёнка и несколько котов.

ЧИТАТЬ ДАЛЕЕ …
Модуль 25. Задача 5. А-а-автомобиль!

Модуль 25. Задача 5. А-а-автомобиль!

Автомобиль имеет координаты своего положения и угол, описывающий направление движения. Он может быть изначально поставлен в любую точку с любым направлением (конструктор), может проехать в выбранном направлении определённое расстояние и может повернуть, то есть изменить текущее направление на любое другое (передаём привет математике и формулам).

Реализуйте класс автомобиля, а также класс, который будет описывать автобус. У автобуса, кроме того, что имеется у автомобиля, должны быть поля, содержащие число пассажиров и количество полученных денег, изначально равное нулю. Также должны быть методы «войти» и «выйти», изменяющие число пассажиров. Наконец, метод move должен быть переопределён, чтобы увеличивать количество денег в соответствии с количеством пассажиров и пройденным расстоянием.

ЧИТАТЬ ДАЛЕЕ …
Модуль 25. Задача 4. Компания

Модуль 25. Задача 4. Компания

Реализуйте иерархию классов, описывающих служащих в компании. На самом верху иерархии — класс Person, который описывает человека именем, фамилией и возрастом. Все атрибуты этого класса являются приватными.

Далее идёт класс Employee и производные от него классы Manager, Agent и Worker.

Класс «Работник» должен иметь метод расчёта заработной платы, переопределённый в каждом из производных классов. Заработная плата Manager постоянна и равна 13000, заработная плата Agent определяется как оклад 5000 + 5% от объёма продаж, который хранится в специальном поле класса Agent, а заработная плата Worker определяется как 100 * число отработанных часов, которое также хранится в отдельном поле.

В основной программе создайте список из девяти объектов: первые три — Manager, следующие три — Agent и последние три — Worker. Выведите на экран величину заработной платы всех девяти служащих.

ЧИТАТЬ ДАЛЕЕ …
Модуль 25. Задача 3. Свой словарь

Модуль 25. Задача 3. Свой словарь

В силу обстоятельств Васе постоянно приходится работать со словарями и их данными. В том числе и с методом get, который по умолчанию возвращает None, если такого ключа в словаре нет. Однако Васю это не устраивает: для нормальной работы ему нужно возвращать число 0.

Реализуйте класс MyDict, который будет вести себя точно так же, как и обычный словарь, за исключением того, что метод get по умолчанию будет возвращать не None, а число 0.

ЧИТАТЬ ДАЛЕЕ …
Модуль 25. Задача 2. Карма

Модуль 25. Задача 2. Карма

Один буддист-программист решил создать свой симулятор жизни, в котором нужно набрать 500 очков кармы (это константа), чтобы достичь просветления.

Каждый день вызывается специальная функция one_day(), которая возвращает количество кармы от 1 до 7 и может с вероятностью 1 к 10 выкинуть одно из исключений:

  • KillError;
  • DrunkError;
  • CarCrashError;
  • GluttonyError;
  • DepressionError.

Напишите такую программу. Функцию оберните в бесконечный цикл, выход из которого возможен только при накоплении кармы до уровня константы. Исключения обработайте и запишите в отдельный лог karma.log.

ЧИТАТЬ ДАЛЕЕ …
Модуль 25. Задача 1. Налоги

Модуль 25. Задача 1. Налоги

Реализуйте иерархию классов, описывающих имущество налогоплательщиков. Она должна состоять из базового класса Property и производных от него классов Apartment, Car и CountryHouse.

Базовый класс должен иметь атрибут worth (стоимость), который передаётся в конструктор, и метод расчёта налога, переопределённый в каждом из производных классов. Налог на квартиру вычисляется как 1/1000 её стоимости, на машину — 1/200, на дачу — 1/500.

Каждый дочерний класс должен иметь конструктор с одним параметром, передающий свой параметр конструктору базового класса.

Разработайте интерфейс программы. Пусть она запрашивает у пользователя количество его денег и стоимость имущества, а затем выдаёт налог на соответствующее имущество и показывает, сколько денег ему не хватает (если это так).

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 9. Крестики-нолики

Модуль 24. Задача 9. Крестики-нолики

Напишите программу, которая реализует игру «Крестики-нолики». Да, это всё условие задачи.

Ваши классы в этой задаче могут выглядеть так:

class Cell:
    #  Клетка, у которой есть значения
    #   - занята она или нет
    #   - номер клетки
    pass

class Board:
    #  Класс поля, который создаёт у себя экземпляры клетки
    pass

class Player:
    #  У игрока может быть
    #   - имя
    #   - на какую клетку ходит
    pass
ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 8. Блек-джек

Модуль 24. Задача 8. Блек-джек

Костя так и не смог завязать с азартными играми. Но перед тем как в очередной раз всё проиграть, он решил как следует подготовиться. И написать программу, на которой он будет тренироваться играть в блек-джек.

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

Карты имеют такие «ценовые» значения:

  • от двойки до десятки — от 2 до 10 соответственно;
  • у туза — 1 или 11 (11 пока общая сумма не больше 21, далее 1);
  • у «картинок» (король, дама, валет) — 10.

Напишите программу, которая вначале случайным образом выдаёт пользователю и компьютеру по две карты и затем запрашивает у пользователя действие: взять карту или остановиться. На экран должна выдаваться информация о руке пользователя. После того как игрок останавливается, выведите на экран победителя.

Представление карты реализуйте с помощью класса.

Дополнительно: сделайте так, чтобы карты не могли повторяться.

Ваши классы в этой задаче могут выглядеть так:

class Card:
    #  Карта, у которой есть значения
    #   - масть
    #   - ранг/принадлежность 2, 3, 4, 5, 6, 7 и так далее
    pass

class Deck:
    #  Колода создаёт у себя объекты карт
    pass

class Player:
    #  Игрок, у которого есть имя и какие-то карты на руках
    pass
ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 7. Совместное проживание

Модуль 24. Задача 7. Совместное проживание

Чтобы понять, стоит ли ему жить с кем-то или всё же лучше остаться в гордом одиночестве, Артём решил провести довольно необычное исследование. Для этого он реализовал модель человека и модель дома.

Человек может:

  1. Есть (+ сытость, − еда).
  2. Работать (− сытость, + деньги).
  3. Играть (− сытость).
  4. Ходить в магазин за едой (+ еда, − деньги).

У человека есть имя, степень сытости (изначально 50) и дом.

В доме есть холодильник с едой (изначально 50 еды) и тумбочка с деньгами (изначально 0 денег).

Если сытость человека становится меньше нуля, то человек умирает.

Логика действий человека определяется следующим образом:

  1. Генерируется число кубика от 1 до 6.
  2. Если сытость < 20, то поесть.
  3. Иначе, если еды в доме < 10, то сходить в магазин.
  4. Иначе, если денег в доме < 50, то работать.
  5. Иначе, если кубик равен 1, то работать.
  6. Иначе, если кубик равен 2, то поесть.
  7. Иначе играть.

По такой логике эксперимента человеку надо прожить 365 дней.

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

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 6. Магия

Модуль 24. Задача 6. Магия

Для одной игры необходимо реализовать механику магии, где при соединении двух элементов получается новый. У нас есть четыре базовых элемента: «Вода», «Воздух», «Огонь», «Земля». Из них как раз и получаются новые: «Шторм», «Пар», «Грязь», «Молния», «Пыль», «Лава».

Вот таблица преобразований:

  • Вода + Воздух = Шторм
  • Вода + Огонь = Пар
  • Вода + Земля = Грязь
  • Воздух + Огонь = Молния
  • Воздух + Земля = Пыль
  • Огонь + Земля = Лава

Напишите программу, которая реализует все эти элементы. Каждый элемент необходимо организовать как отдельный класс. Если результат не определён, то возвращается None.

Примечание: сложение объектов можно реализовывать через магический метод __add__, вот пример использования:

class Example_1:
    def __add__(self, other):
        return Example_2()

class Example_2:
    answer = 'сложили два класса и вывели'

a = Example_1()
b = Example_2()
c = a + b
print(c.answer)

Дополнительно: придумайте свой элемент (или элементы), а также реализуйте его взаимодействие с остальными элементами.

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 5. Весёлая ферма 2

Модуль 24. Задача 5. Весёлая ферма 2

Мы продолжаем писать игру «Весёлая ферма», и теперь необходимо её немного модернизировать. Всё-таки кому-то нужно собирать урожай, и для этого нам понадобится садовник, у которого есть:

  1. Имя.
  2. Грядка с растением, за которым он ухаживает (в нашем случае пока только грядка с картошкой).

И он может:

  1. Ухаживать за грядкой.
  2. Собирать с неё урожай (количество картошки ― пустой список).

Модернизируйте программу, используя новый класс «Садовник». На всякий случай даём описание картошки и грядки:

У картошки есть её номер в грядке, а также стадия зрелости. Она может предоставлять информацию о своей зрелости и расти. Всего у картошки может быть четыре стадии зрелости.

Грядка с картошкой содержит список картошки, которая на ней растёт, и может, собственно, взращивать всю эту картошку, а также предоставлять информацию о зрелости всей картошки на своей территории.

Проверьте работу программы, создав грядку из пяти картошек и отдав эту грядку садовнику. Пусть поухаживает за грядкой и соберёт урожай (а может быть даже и не один).

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 4. Отцы, матери и дети
Модуль 24. Задача 3. Круг

Модуль 24. Задача 3. Круг

На координатной плоскости рисуются круги, у каждого круга следующие параметры: координаты X и Y центра круга и значение R ― радиус круга. По умолчанию центр находится в (0, 0), а радиус равен 1.

Реализуйте класс «Круг», который инициализируется по этим параметрам. Круг также может:

  1. Находить и возвращать свою площадь.
  2. Находить и возвращать свой периметр.
  3. Увеличиваться в K раз.
  4. Определять, пересекается ли он с другой окружностью.
ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 2. Студенты

Модуль 24. Задача 2. Студенты

Реализуйте модель с именем Student, содержащую поля: «ФИ», «Номер группы», «Успеваемость» (список из пяти элементов). Затем создайте список из десяти студентов (данные о студентах можете придумать свои или запросить их у пользователя) и отсортируйте его по возрастанию среднего балла. Выведите результат на экран.

ЧИТАТЬ ДАЛЕЕ …
Модуль 24. Задача 1. Драка

Модуль 24. Задача 1. Драка

Вы работаете в команде разработчиков мобильной игры, и вам досталась такая часть от ТЗ заказчика:

Есть два юнита, каждый из них называется «Воин». Каждому устанавливается здоровье в 100 очков. Они бьют друг друга в случайном порядке. Тот, кто бьёт, здоровье не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара. После каждого удара надо выводить сообщение, какой юнит атаковал и сколько у противника осталось здоровья. Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.

Реализуйте такую программу.

ЧИТАТЬ ДАЛЕЕ …