Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import time
- from dataclasses import dataclass, field
- import logging # for debugging
- from typing import ClassVar
- logging.basicConfig(level=logging.INFO, format='** DEBUGGING ** %(message)s')
- DURATION = 1 # so you can set delay at top of code, don't want to wait when testing
- def sleep():
- time.sleep(DURATION)
- @dataclass
- class Flatmate:
- name: str
- door: str
- questions: tuple = field(default_factory=tuple)
- intro: tuple = field(default_factory=tuple)
- lives: ClassVar[int] = 3
- @classmethod
- @property
- def lives_left(cls):
- return cls.lives > 0
- @classmethod
- def change_lives(cls, change: int = -1):
- cls.lives += change
- def ask_questions(self):
- """ asks all questions and removes a life for each wrong anwswer """
- if self.lives_left:
- for question, answer in self.questions:
- logging.info(f"\nAnswer: {answer}\n")
- response = input(question + ": ").strip().casefold()
- if response != answer:
- self.change_lives(-1)
- print(f"Oops. Wrong answer. Lives left: {self.lives}.")
- if not self.lives_left:
- break # no more questions!
- def greeting(self):
- print("\n")
- for line in self.intro:
- print(line)
- sleep()
- print("\n")
- flatmates = (
- Flatmate("Eline", "E",
- (("birthday", "05/10/1997"),
- ("colour", "green"),
- ("meal", "pâtes champignons"),
- ("film", "oss 117"),),
- ("You knock on Eline's door.",
- "*Elle fait pause a Koh-Lanta*",
- "Qu'est-ce qu'il y a ? Ah, tu veux mon cadeau ? Eh bien, réponds à ces questions sur moi : ",)
- ),
- Flatmate("Louise", "L",
- (("birthday", "08/10/1998"),
- ("colour", "jaune"),
- ("meal", "les pâtes grillées de mamie Pou"),
- ("film", "30 ans sinon rien"),),
- ("You knock on Louise's door.",
- "*Elle apparaît, tenant un vaporisateur pour ses plantes.*",
- "Je faisais de l'improvisation avec mes plantes ! Maintenant, tu dois improviser des réponses !",)
- ),
- Flatmate("Amir", "A",
- (("birthday", "15/01/1994"),
- ("colour", "vert"),
- ("meal", "couscous"),
- ("film", "les affranchis"),),
- ("You knock on Amir's door.",
- "*Les sons de la guitare s'arrêtent*",
- "*Amir apparaît, couvert d'œufs*",
- "Je m'amusais à mettre des œufs dans ma guitare, que veux-tu ? ",)
- ),
- Flatmate("Jonny", "J",
- (("birthday", "27/08/1999"),
- ("colour", "blue"),
- ("meal", "sticky chicken"),
- ("film", "her"),),
- ("You knock on Jonny's door.",
- "*The strange singing sounds stop*",
- "Why hello there! I was singing some Louis Armstrong - did you hear? Come on then, answer my questions bruv.",)
- )
- )
- print('''
- _H_ _H_ _H_ o88o.
- .=|_|===========v==|_|============v==|_|===========. (8%8898),
- / | | \ ,(8888%8688)
- /_________________|_________________|__________________(898%88688HJW)
- |=|_|_|_| =|_|_|=|X|)^^^(|X|=|/ \|=||_|_|_|=| ||_|_|=|`(86888%8%9b)
- |=|_|_|_|== |_|_|=|X|\___/|X|=||_||=||_____|=|_||_|_|=|___(88%%8888)
- |=_________= ,-. =|""""""""""="""""=|=_________== == =|_______\//`'
- |=|__|__|_| //O\=|X|"""""|X|=//"\=|=|_|_|_|_| .---.=|.=====.||
- |=|__|__|_|=|| ||=|X|_____|X|=|| ||=|=|_______|=||"||=||=====|||
- |___d%8b____||_||_|=_________=||_||_|__d8%o%8b_=|j_j|=|j==o==j|\---
- ''')
- sleep()
- print("""Bienvenue. Each of your flatmates has a gift for you
- but you'll need to answer some questions first...""")
- flatmates_to_visit = {flatmate.door: flatmate for flatmate in flatmates}
- while Flatmate.lives_left and flatmates_to_visit:
- print('\nFlatmates:\n\n Door Name')
- print(" --------------------")
- for door, flatmate in flatmates_to_visit.items():
- print(f" {door:^4} {flatmate.name}")
- print(" --------------------\n")
- door = input("\nWhich door do you want to knock on? ").upper()
- print()
- if door in flatmates_to_visit:
- flatmate = flatmates_to_visit[door]
- flatmate.greeting()
- flatmate.ask_questions()
- del flatmates_to_visit[door]
- else:
- print("That's not even a door for one of your flatmates, dummy")
- if Flatmate.lives_left:
- print('Well done')
- else:
- print('You do not know your friends well enough')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement