Что нужно сделать
Чтобы понять, стоит ли ему жить с кем-то или всё же лучше остаться в гордом одиночестве, Артём решил провести довольно необычное исследование. Для этого он реализовал модель человека и модель дома.
Человек может:
- Есть (+ сытость, − еда).
- Работать (− сытость, + деньги).
- Играть (− сытость).
- Ходить в магазин за едой (+ еда, − деньги).
У человека есть имя, степень сытости (изначально 50) и дом.
В доме есть холодильник с едой (изначально 50 еды) и тумбочка с деньгами (изначально 0 денег).
Если сытость человека становится меньше нуля, то человек умирает.
Логика действий человека определяется следующим образом:
- Генерируется число кубика от 1 до 6.
- Если сытость < 20, то поесть.
- Иначе, если еды в доме < 10, то сходить в магазин.
- Иначе, если денег в доме < 50, то работать.
- Иначе, если кубик равен 1, то работать.
- Иначе, если кубик равен 2, то поесть.
- Иначе играть.
По такой логике эксперимента человеку надо прожить 365 дней.
Реализуйте такую программу и создайте двух людей, живущих в одном доме. Проверьте работу программы несколько раз.
Что оценивается
- Результат вычислений корректен.
- Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
- Сообщения о процессе получения результата осмысленны и понятны для пользователя.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
.
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()