Совместное проживание

Что нужно сделать

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

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

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

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

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

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

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

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

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

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

Что оценивается

  • Результат вычислений корректен.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • Сообщения о процессе получения результата осмысленны и понятны для пользователя.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
from random import randint

class Homo:
    def __init__(self, name, home, hungry=50):
        self.name = name
        self.hungry = hungry
        self.home = home

    def eating(self):
        if self.home.food > 0:
            self.home.food -= 1
            self.hungry += 1

    def shoping(self):
        if self.home.money > 0:
            self.home.money -= 1
            self.home.food += 1
        else:
            self.working()

    def working(self):
        self.home.money += 1
        self.hungry -= 1

    def gaming(self):
        self.hungry -= 1

    def die(self):
        if self.hungry < 0:
            return True

    def action(self):
        act = randint(1, 6)
        if self.hungry < 20:
            self.eating()
        elif self.home.food < 10:
            self.shoping()
        elif self.home.money < 50:
            self.working()
        elif act == 1:
            self.working()
        elif act == 2:
            self.eating()
        elif act in (3, 4, 5, 6):
            self.gaming()

    def info(self):
        print(f'{self.name} голод: {self.hungry}')

class Home:
    def __init__(self, food=50, money=0):
        self.food = food
        self.money = money

    def info(self):
        print(f'Запасы в доме: еда({self.food}), деньги({self.money})')

def sim(p1, p2):
    day = 0
    while day != 365:
        if p1.die() is not True and p2.die() is not True:
            day += 1
            p1.action()
            p2.action()
        else:
            print(f'Один из персонажей умер')
            break
    print(f'Персонажи прожили {day} дней.\n')

sweet_home = Home()
person_1 = Homo('Bob', sweet_home)
person_2 = Homo('Alexa', sweet_home)

sim(person_1, person_2)
sweet_home.info()
person_1.info()
person_2.info()