Запоминание выбора и дальнейшее использование в простой текстовой игре

Постараюсь как можно точнее передать суть своего вопроса, но в начале посмотрите, пожалуйста, код. Я его упростила, чтобы не было лишних слов в конструкции print.

брусок = None

while брусок not in ['1', '2']:

    брусок = input ("Хотите взять брусок с собой? 1. Взять. 2. Оставить. ")
    if брусок == '1':
        print ("Вы взяли брусок.")
    elif брусок == '2':
        print("Вы оставили брусок на месте.")
    else:
        print ("Ответьте ещё раз.")

Это главный выбор, от которого мы отталкиваемся. Между ним и следующей частью кода есть другие действия, но они не влияют на эти ветки.

if брусок == '1':
    B1 = None
while B1 not in ['1' , '2' , '3']:
    B1 = input ('''
1. Бежать. 
2. Поговорить.
3. Воспользоваться бруском. ''')
    if B1 == '1':
        print ("Вы убежали.")
    elif B1 == '2':
        print ("Вы решили поговорить. ")
        tho = None
        while tho not in ['1' , '2']:
            tho = input ("Теперь перед вами встал выбор: 1. Говорить дальше. 2. Убежать. ")
            if tho == '1':
                print ("Вас убили.")
            elif tho == '2':
                print ("Вы убежали")
            else:
                print ("Ответьте ещё раз.")
    elif B1 == '3':
        print ("Вы смогли постоять за себя. ")
    else:
        print ("Такого варианта ответа нет, ответьте на вопрос ещё раз.")


if брусок == '2':
    B2 = None
while B2 not in ['1' , '2']:
    B2 = input ('''
1. Бежать. 
2. Поговорить. ''')
    if B2 == '1':
        print ("""Вы убежали. """)
    elif B2 == '2':
        print ("Вы решили поговорить. ") 
        j = None
        while j not in ['1' , '2']:
            j = input ("Теперь перед вами встал выбор: 1. Говорить дальше. 2. Убежать. ")
            if j == '1':
                print ("Вас убили.")
            elif j == '2':
                    print ("Вы убежали. ")
            else:
                print ("Ответьте ещё раз.")
    else:
        print ("Ответьте ещё раз.")

Так вот. Если изначально взять брусок, то в дальнейшем есть выбор. Если нет, то он пишет ошибку: NameError: name 'B1' is not defined. К сожалению, я не могу понять, как решить эту проблему. Ну а вообще мне нужно, чтобы после выбора на счёт бруска выводились две различные ветки, которые будут зависить от изначального выбора игрока. Заранее спасибо.


Ответы (1 шт):

Автор решения: RadRussianRus

Обратите внимание на эту часть кода:

if брусок == '1':
    B1 = None
while B1 not in ['1' , '2' , '3']:

B1 определяется только если выбран вариант 1, поэтому выбор любого другого варианта будет выдавать ошибку.

Та же самая проблема наблюдается и у B2, но здесь ошибка выдаётся после первой ветки.

Лучше всего здесь будет внести while под условие, потому что он нужен только при выборе определённого варианта.

Пример:

if брусок == '1':
    B1 = None
    while B1 not in ['1' , '2' , '3']:

Разумеется, все отступы в блоке while также должны быть увеличены.

→ Ссылка