Skip to content

Instantly share code, notes, and snippets.

@rodion-solovev-7
Created February 15, 2022 12:48
Show Gist options
  • Save rodion-solovev-7/36fbe7b03e1e14d9dc0b99a5ba355d32 to your computer and use it in GitHub Desktop.
Save rodion-solovev-7/36fbe7b03e1e14d9dc0b99a5ba355d32 to your computer and use it in GitHub Desktop.
Drinkin' game (Lena's Adventures)
# Дата: где-то около октября 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