Created
February 15, 2022 12:48
-
-
Save rodion-solovev-7/36fbe7b03e1e14d9dc0b99a5ba355d32 to your computer and use it in GitHub Desktop.
Drinkin' game (Lena's Adventures)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Дата: где-то около октября 2020 | |
# | |
# Написано за час на паре как доказательство того, что классы существуют. | |
# (Да-да, они и вправду существуют!) | |
# Правок и изменений архитектуры не планируется. | |
from random import randint | |
class Alcohol: | |
__slots__ = '_alcohol_degree' | |
def __init__(self, degree: int): | |
self._alcohol_degree = degree | |
@property | |
def degree(self): | |
return self._alcohol_degree | |
class Drinker: | |
__slots__ = ('_drinks_sum', '_alcohol_degree', '_max_drinks_sum', '_max_alcohol_degree', '_bottles_count') | |
def __init__(self, max_drink: int): | |
self._drinks_sum = 0 | |
self._alcohol_degree = 0 | |
self._max_drinks_sum = max_drink | |
self._bottles_count = 0 | |
# self._max_alcohol_degree = 0 | |
def drink(self, alcohol: Alcohol) -> None: | |
if self._drinks_sum + alcohol.degree > self._max_drinks_sum: | |
raise Exception("Лена неверно оценила свои возможности и выпила слишком много.\n" | |
"Лена - не самый опытный ведьмак... Ведьмаки могут спать на снегу, но это не про Лену...") | |
if self._alcohol_degree > alcohol.degree: | |
raise Exception("Лена забыла одну из главных заповедей алкоголиков: не понижай градус!\n" | |
"На утро она очнулась в очень странных обстоятельствах с больной головой") | |
self._bottles_count += 1 | |
self._drinks_sum += alcohol.degree | |
self._alcohol_degree = max(alcohol.degree, self._alcohol_degree) | |
@property | |
def drinks_sum(self): | |
return self._drinks_sum | |
def main(): | |
print( | |
"""Лена - очень социальная девочка: ей очень нравится проводить время с друзяшками. Однако карантин подпортил | |
Лене планы: из-за отмены очного обучения она сейчас живёт в деревне у родителей и никуда почти не ходит. | |
Однако накануне планируется большой праздник, на котором будет очень много её знакомых. | |
Лена не могла не вопользоваться таким шансом! | |
Праздник проходит в довольно традиционных для студентов кондициях: все пьют. | |
Но цель Лены - не просто пить, её цель общаться! | |
Условия: | |
В течение праздника к Лене поочерёдно подходит по одному знакомому. Знакомый предлагает ей выпить с ним напиток | |
с крепостью X. Лена может либо согласиться и душевно с ним поговорить, либо отказаться и беседа.. не заладится. | |
Притом Лена (как опытный в таких делах человек) знает, что нельзя выпивать напитков с суммарной крепостью | |
больше, чем S (иначе Лена рискует уснуть посередине разговора и проснуться только на следующее утро), а также | |
ей известно, что после напитка с определённой крепостью никогда не должен следовать напиток с меньшей крепостью | |
(в противном случае Лене станет уже не до общения). | |
Ваша задача: | |
По известной заранее очерёдности напитков попытайтесь максимизировать социоактивности Лены | |
(дать ей пообщаться с наибольшим кол-вом человек)""") | |
friends_count = 8 | |
lena = Drinker(100) | |
alcohols = [Alcohol(randint(2, 50)) for _ in range(friends_count)] | |
print("Список крепостей алкоголя:\n", *(a.degree for a in alcohols)) | |
try: | |
for a in alcohols: | |
print(f"Суммарное опьянение Лены: {lena.drinks_sum}") | |
print(f"Лене предлагают выпить напиток с крепостью {a.degree}") | |
choose = input("Согласиться? (y/n)") == 'y' | |
if choose: | |
lena.drink(a) | |
except Exception as e: | |
print(e.args[0]) | |
print(f"Итого выпи.. общений = {lena.drinks_sum}") | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment