Python.Middle: Код игры «Домовой»

Тут немного доработанный код нашей игры «Домовой».

Я добавил очистку экрана и цветной вывод в консоль.

import random
import time
import subprocess
import platform

# Ребята, тут я назначаю цвета для надписей, чтобы был цветной вывод!
RESET = "\033[0m"      # Сброс цвета
RED = "\033[91m"       # Красный
GREEN = "\033[92m"     # Зеленый
YELLOW = "\033[93m"    # Желтый

# Эта функция очищает экран консоли! Для красоты =)
def ClearScreen():
    command = 'cls' if platform.system() == 'Windows' else 'clear'
    subprocess.run(command, shell=True)

TASK_POOL = [
    "Убрать квартиру",
    "Проверить трубы",
    "Напугать жильцов",
    "Покормить собаку"
]

PLACES_POOL = [100,101,102,103,104,105]
day = []

def GenerateDay():
    day = []
    placePool = [ PLACES_POOL[random.randint(0,len(PLACES_POOL)-1)] for i in range(random.randint(3,7)) ]
    for place in placePool:
        day.append( { place: TASK_POOL[ random.randint(0, len(TASK_POOL) - 1)] })
    return day

def Timer(func):
    def wrapper(*args, **kwargs):
        startTime = time.time()
        result = func(*args, **kwargs)
        endTime = time.time()
        if(endTime - startTime > 10):
            print(f"{GREEN}Время выполнения: {endTime - startTime} секунд{RESET}")
        return result
    return wrapper

def PrintDay(day):
    for tasknplace in day:
        for place, task in tasknplace.items():
            print(f"Задача: {task}, квартира {place}")

def startDay():
    global day
    if len(day)  != 0:
        print(f"{RED}Так-то день уже начался!{RESET}")
        return
    day = GenerateDay()
    ClearScreen()
    print(f"{YELLOW}Задачи были сгенерированы! Приступайте к выполнению!{RESET}")

def CompleteTask(place, task):
    global day
    if {place:task} in day:
        day.remove({place:task})
        ClearScreen()
        print(f"{GREEN}Задание \"{task}\" выполнено!{RESET}")
    else:
        print(f"{RED}Ошибка! Нет такого задания!{RESET} ")
        print(f"{YELLOW}Осталось заданий: {len(day)}{RESET}")

@Timer
def CompleteDay():
    global day
    if len(day) == 0:
        ClearScreen()
        print(f"{RED}День ещё не начался!{RESET}")
        
        return
    
    while len(day) != 0:
        PrintDay(day)
        try:
            place,task = input("Введите через запятую квартиру и задачу: ").split(",")
            place = int(place.strip())
        except Exception as e:
            print(f"{RED}Неверное значение: {e}{RESET}")
            continue
        CompleteTask(place, task.strip())
    ClearScreen()
    print(f"{GREEN}День завершён...{RESET}")

methods = {
    1 : ["Начать день", startDay],
    2 : ["Выполнить задачи", CompleteDay],
    3 : ["Выйти", lambda:exit(0)]
}

while True:
    for method in methods.keys():
        print(f"{method}. {methods[method][0]}")
    try:
        choice = int(input("Выберите пункт меню: "))
        if choice not in methods.keys():
            continue
        methods[choice][1]()
    except Exception as e:
        print(f"{RED}Неверный ввод! Будь внимательнее! {e}{RESET}")