#python
#python
Вопрос:
Я довольно новичок в python и решил попробовать текстовое приключение в качестве начального проекта, чтобы изучить основы.
У меня есть цикл while, который перезапускается с помощью var valid_input, если пользователь вводит неправильное слово. Это работает, но я замечаю, что даже когда он уже должен перезапускаться, он все равно считывает последний оператор else, выдавая дополнительную печать, которую я собираюсь показывать только тогда, когда пользователь вводит неправильное действие.
while valid_input == False:
dec2 = input("Do you shout aloud or try to use something to light the place (shout/light)")
if dec2 == "light":
if "lighter" in inventory:
print(">You use the lighter to light up the room")
print(">You find yourself in a large cavernous structure")
room_visible = 1
valid_input = True
break
else:
print(">You don't seem to have anything to light up the place.")
valid_input = False
if dec2 == "shout":
print(">You shout at the top of your lungs and see what that does.")
valid_input = True
break
else:
print("Invalid action")
valid_input = False
Обновление # 1
Я исправил код и попытался сделать правильный отступ, поскольку это была рекомендация. Для меня это имело смысл, хотя оно все равно выводило сообщение «Недопустимое действие» независимо.
Я решил случайным образом поместить valid_input = True в оператор else, и, похоже, это сработало. В настоящее время это код, который работает, хотя я не понимаю, почему он сработал. Надеюсь, кто-нибудь объяснит!
while valid_input == False:
dec2 = input("Do you shout aloud or try to use something to light the place (shout/light)")
if dec2 == "light":
if "lighter" in inventory:
print(">You use the lighter to light up the room")
print(">You find yourself in a large cavernous structure")
room_visible = 1
valid_input = True
break
else:
valid_input = True
print(">You don't seem to have anything to light up the place.")
valid_input = False
elif dec2 == "shout":
print(">You shout at the top of your lungs and see what that does.")
valid_input = True
break
else:
print("Invalid action")
valid_input = False
Комментарии:
1. Пожалуйста, исправьте отступ. Как написано, мы не можем определить, какие части имеют отступ под циклом while.
2. Кроме того, неясно, что вы имеете в виду, когда говорите «перезапустить» цикл. Здесь есть только один цикл, и когда он будет выполнен, он будет выполнен; для него нет способа «перезапустить». Есть ли какой-либо внешний цикл или другая содержащая структура, которую вы нам не показали?
3. Похоже, что ваш отступ перепутан, может быть?
if dec2 == "shout"
похоже, что он должен быть на том же уровне отступаif dec2 == "lighter"
, что и и должен быть anelif
, было бы справедливо сказать?4. Последнее
if dec2 == "shout"
утверждение находится внутриif dec2 == "light"
ветки, поэтому оно никогда не может быть истинным, и поэтомуelse
ветка всегда выполняется.5. @JohnGordon Да, на самом деле это был отступ кода, и вы, ребята, указали, что это было неправильно, поэтому я исправил это! На самом деле это не решило проблему, но все равно будет учитываться при форматировании моего кода. 🙂
Ответ №1:
Финал if dec2=="shout" ... else ...
находится внутри блока кода if dec2=="light"
. Если пользователь вводит «light», будет выполнена эта комбинация if-else. Поскольку dec2
is light
, это не shout
так, и, следовательно, интерпретатор вводит else
блок и печатает "Invalid action"
.
Вероятно, вам нужен следующий код
while valid_input == False:
dec2 = input("Do you shout aloud or try to use something to light the place (shout/light)")
if dec2 == "light":
if "lighter" in inventory:
print(">You use the lighter to light up the room")
print(">You find yourself in a large cavernous structure")
room_visible = 1
valid_input = True
break
else:
print(">You don't seem to have anything to light up the place.")
valid_input = False
elif dec2 == "shout":
print(">You shout at the top of your lungs and see what that does.")
valid_input = True
break
else:
print("Invalid action")
valid_input = False
Комментарии:
1. Привет, спасибо за это. Логика правильная и имеет смысл для меня, хотя, когда я попробовал ее, она по-прежнему выводит сообщение «Недопустимое действие». То, что я случайно попытался, было помещено valid_input = True перед оператором else, и, похоже, это сработало, хотя я до сих пор не понимаю, почему.