Что нужно сделать
Один буддист-программист решил создать свой симулятор жизни, в котором нужно набрать 500 очков кармы (это константа), чтобы достичь просветления.
Каждый день вызывается специальная функция one_day()
, которая возвращает количество кармы от 1 до 7 и может с вероятностью 1 к 10 выкинуть одно из исключений:
KillError
;DrunkError
;CarCrashError
;GluttonyError
;DepressionError
.
Напишите такую программу. Функцию оберните в бесконечный цикл, выход из которого возможен только при накоплении кармы до уровня константы. Исключения обработайте и запишите в отдельный лог karma.log
.
Что оценивается
- Результат вычислений корректен.
- Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
- При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
- Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры.
- Для создания нового класса на основе уже существующего используется наследование.
- Сообщения о процессе получения результата осмыслены и понятны для пользователя.
- Переменные, функции и собственные методы классов имеют значащие имена, а не
a
,b
,c
,d
. - Классы и методы/функции имеют прописанную документацию.
- Названия используемых файлов соответствуют тем, которые написаны в задаче.
from random import randint, choice
class Karma:
def __init__(self):
self.__karma_points = 0
self.__days_count = 0
def one_day(self, value):
self.set_day()
try:
if value == 10:
exepts_tuple = ('KillError', 'DrunkEror', 'CarCrashError', 'GluttonyError', 'DepressionError')
raise Exception(choice(exepts_tuple))
else:
point = randint(1, 7)
self.set_karma_point(point)
except Exception as exc:
with open('karma.log', 'a', encoding='UTF-8') as file:
file.writelines(f'\nДень {self.get_day()}, ошибка: {exc}')
def set_karma_point(self, point):
self.__karma_points += point
def get_karma(self):
return self.__karma_points
def get_day(self):
return self.__days_count
def set_day(self):
self.__days_count += 1
def toconstant(self):
while True:
finish = self.get_karma()
if finish >= 500:
print(f'День {self.get_day()}, набрано {finish} очков кармы.')
break
else:
value = randint(1, 10)
self.one_day(value)
gokarma = Karma()
gokarma.toconstant()