Запоминание выбора и дальнейшее использование в простой текстовой игре
Постараюсь как можно точнее передать суть своего вопроса, но в начале посмотрите, пожалуйста, код. Я его упростила, чтобы не было лишних слов в конструкции 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 шт):
Обратите внимание на эту часть кода:
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 также должны быть увеличены.