import sys
import time
lvl = 0
exp = 0
math = False
geo = False
history = False
def player_stats():
    global lvl
    if not exp == 0:
        for i in range( 0, exp, 10 ):
            lvl += 1
    print( f"\nВаш уровень: {lvl}\nВаш опыт: {exp}\n" )
def question( q1=None, q2=None, q3=None ):
    print( "1. "+q1+"\n2. "+q2+"\n3. "+q3+"\n4. Выход из игры." )
    while True:
        try:
            answer = int(input( "Введите номер ответа, чтобы его выбрать и нажмите ENTER: " ))
            break
        except KeyboardInterrupt:
            print( "\nНеправильный ввод. Попробуйте снова!" )
            continue
    while True:
        try:    
            if answer == 1:
                return 1
            elif answer == 2:
                return 2
            elif answer == 3:
                return 3
            elif answer == 4:
                sys.exit()
        except ValueError:
            print( "\nНеправильный ввод. Попробуйте снова!" )
            continue
def accept():
    while True:
        try:
            try:
                input1 = input( "Введите 'y', чтобы продолжить: " )
            except KeyboardInterrupt:
                try:
                    print( "\nНеправильный ввод. Попробуйте снова!" )
                    continue
                except KeyboardInterrupt:
                    continue
        except EOFError:
            print( "Неправильный ввод. Попробуйте снова!" )
            continue
        if input1 == "y" or input1 == "у" or input1 == "Y" or input1 == "У":
            return True
        else:
            print( "Неправильный ввод. Попробуйте снова!" )
            continue


if __name__ == "__main__":
    lvl = 0
    exp = 0
    print( "Здравствуй, дорогой читатель! Ты запустил квест-историю 'В стране невыученных уроков'. В течении игры ты будешь путешествовать по городам этого государтсва! Желаю удачи!" )
    if accept() == True:
        name = input( "Введите ваше имя: " )
        while True:
            qu3_1 = 0
            print( f'Как-то раз {name} не сделал(а) домашнее задание, из-за этого его отправили в страну невыученных уроков. Он попал на развилку. На указателе было написано:"Направо пойдёшь – в город математики попадёшь, налево пойдёшь – в город географии попадёшь, вперёд пойдёшь -  в город истории попадёшь". {name} пошёл(а)...' )
            qu1 = question( 'Налево', 'Направо', 'Вперёд' )
            if qu1 == 2:
                if math == True:
                    print( f'{name} посмотрел(а) на табличку, указывающую в сторону города математики. В этом городе герой уже был, ему незачем туда идти.' )
                    continue
                while True:
                    print( f'Главная цель нашего героя – попасть домой. Чтобы это сделать, нужно решить всё домашнее задание. Пошёл(ла) {name} в город математики. Ворота были закрыты. На них висела табличка: "2 + 3 * 2 = ?", а под ней – дырка для бумаг. Рядом лежала коробка с бумагой. {name} взял(а) бумагу, написал(а): "..." положил(а) в отверстие.' )
                    qu2 = question( '8', '10', '7' )
                    while True:
                        if qu2 == 1:
                            exp += 5
                            player_stats()
                            print( f'Ворота открылись. Впереди виднелся город математики. Мэрия была прямо по дороге. {name} пошёл(ла) к мэру. Глядя по сторонам, {name}, гулял(а) до мэрии. Прямо перед ней стоял какой-то человек. {name} спросил(а): "Кто вы?" Персонаж ответил: "Я мэр этого города! Но у меня не хватает знаний решить пример: 5^5 * 2*10 – 1024, на воротах мэрии. Поможете?" {name} ответил ...' )
                            qu4 = question( '3 198 976', '4 000 000', '3 298 976' )
                            if qu4 == 1:
                                exp += 10
                                player_stats()
                                print( f'Мэр перепроверил ответ и положил его в отверстие для бумаг. Дверь в мэрию открылась, и наш герой увидел торговый автомат, а в нём лежали разные бумаги. На экране было написано, что все они бесплатные, но взять можно только одну. {name} нажал(а) на номер ...' )
                                qu5 = question( 'Первую', 'Вторую', 'Третью' )
                                if qu5 == 3:
                                    exp += 100
                                    print( f'{name} взял(а) таинственную бумагу, на ней были написаны ответы на все домашние задания! Герой сразу вернулся к себе домой! Спасибо за игру!' )
                                    time.sleep(20)
                                    sys.exit()
                                elif qu5 == 1:
                                    print( 'На этой бумаге был записан ответ на домашнее задание по математике. Наш герой возращается на развилку!' )
                                    qu3_1 = 2
                                    math = True
                                    break
                                elif qu5 == 2:
                                    print( 'На этой бумаге был записан ответ на домашнее задание по матматике и несколько правил по ней! Наш герой возвращается на развилку!' )
                                    qu3_1 = 2
                                    math = True
                                    exp += 20
                                    player_stats()
                                    break
                        else:
                            print( f'В ответ на это не поступило никаких действий. {name} ...' )
                            qu3 = question( 'Попробовал(а) снова', 'Пошёл(ла) обратно к развилке', 'Продолжил(а) ждать' )
                            if qu3 == 1:
                                qu3_1 = 1
                                break
                            elif qu3 == 2:
                                qu3_1 = 2
                                break
                            elif qu3 == 3:
                                continue
                    if qu3_1 == 1:
                        continue
                    elif qu3_1 == 2:
                        break
                if math == True and history == True and geo == True:
                    print( 'Герой выбрался из страны невыученных уроков, выучив все уроки! Спасибо за игру!' )
                    player_stats()
                    accept()
                    sys.exit()
                if qu3_1 == 2:
                    continue
            elif qu1 == 1:
                if geo == True:
                    print( f'{name} посмотрел(а) на табличку, указывающую в сторону города географии. В этом городе герой уже был, ему незачем туда идти.' )
                    continue
                while True:
                    print( 'До города географии было несколько путей. Герой пошёл по ...' )
                    qu6 = question( 'горам', 'равнине', 'лесу' )
                    if qu6 == 1:
                        print( f'Как только {name} взошёл(ла) на возвышенность, сразу же соскользнул(а) с неё. ' )
                        continue
                    elif qu6 == 3:
                        exp += 5
                        print( 'Герой заблудился в лесу, и не знает как выбраться! Ему придётся пытаться выбраться!' )
                        for e in range(100):
                            print( 'Герой ищет выход!')
                            time.sleep(20)
                        exp += 5
                        print( f'{name} нашёл выход! Вдалеке видется город географии. Герой без труда зашёл в него. Мэрия была прямо напротив входа. Персонаж прошёл в неё. В мэрии он встретил мэра этого города, он дал ответы на домашнее задание! Герой вернулся к развилке.' )
                        qu6_1 = 1
                        break
                    elif qu6 == 2:
                        print( 'Герой спокойно прошёл к городу географии. Мэрия была прямо напротив входа. Персонаж прошёл в неё. В мэрии он встретил мэра этого города, он дал ответы на домашнее задание! Герой вернулся к развилке.' )
                        qu6_1 = 1
                        break
                if math == True and history == True and geo == True:
                    print( 'Герой выбрался из страны невыученных уроков, выучив все уроки! Спасибо за игру!' )
                    player_stats()
                    accept()
                    sys.exit()
                if qu6_1 == 1:
                    geo = True
                    continue
            elif qu1 == 3:
                if history == True:
                    print( f'{name} посмотрел(а) на табличку, указывающую в сторону города истории. В этом городе герой уже был, ему незачем туда идти.' )
                    continue
                while True:
                    print( f'Герой пошёл в город истории. На входе стояла табличка: "В каком году началась Вторая Мировая Война?" Герой взял бумагу и написал: ...' )
                    qu7 = question( 'в 1939', 'в 1941', 'в 1912' )
                    if qu7 == 1:
                        exp += 10
                        print( f'{name} кинул(a) листок с надписями в отверстие и ворота открылись! Прямо напротив выхода стояла мэрия. Наш герой без труда выпросил ответ на домашнее задание по истории!' )
                        player_stats()
                        qu7_1 = 1
                        break
                    else:
                        print( f'Герой кинул листок с надписями, но никакого ответа не получил. {name} решил(а) попробовать снова' )
                        continue
                if math == True and history == True and geo == True:
                    print( 'Герой выбрался из страны невыученных уроков, выучив все уроки! Спасибо за игру!' )
                    player_stats()
                    accept()
                    sys.exit()
                if qu7_1 == 1:
                    history = True
                    continue
                