Ошибка в текстовой базе Python и / или функциях?
Я создаю побег из тюрьмы, и в определенной головоломке игрок должен изуродовать руку, намыть ее, а затем вымыть, чтобы получить доступ к сканеру в другой комнате. В первый раз, когда игрок решает изуродовать руку, в инвентаре он добавляется как "кровавая рука", и когда персонаж использует мыло для чистки руки, я заменяю "кровавую руку" на "мыльную руку", а затем после стирая его полностью, я заменяю "мыльную руку" на "руку" в инвентаре. Моя проблема в том, что независимо от того, что я делаю, если игрок решает изуродовать руку более одного раза, инвентарь продолжает добавлять "кровавую руку", несмотря на то, что игрок уже имеет это в своем инвентаре. Я хочу предотвратить добавление в инвентарь любой дополнительной "кровавой руки", пока у игрока есть "кровавая рука", "мыльная рука" или "рука". Надеюсь, я достаточно подробно объяснил это и смог получить хороший отзыв, который может помочь мне исправить эту ошибку. Я уже пробовал (и) и (или) функции, но ни одна из них не работала. Вот мой код:
elif choice == "use razor on hand":
print ("(cut up mutilated guard's hand)")
if "bloody hand" not in inventory:
if "razor" in inventory:
print ("Furrowing your eyebrows as cold sweat trickled down your neck, you took out your razor blade.")
print ("Slowly placing the fairly sharp tool on the mutilated guard’s wrist, you closed your eyes and felt")
print ("flesh of the guard start to tear. You finished the deed. The bloody hand was added to your")
print ("inventory.")
add_to_inventory("bloody hand")
print("")
print ("Inventory: " + str(inventory))
elif "razor" not in inventory:
print ("You don't own this item in your inventory.")
elif "bloody hand" or "soapy hand" or "hand" in inventory:
print ("You already own this item in your inventory.")
3 ответа
Вы можете спросить о каждой вещи в отдельности:
elif ("bloody hand" in inventory) or ("soapy hand" in inventory) or ("hand" in inventory):
Вы хотите проверить, any
предмет в инвентаре находится в set
ручных типов:
hands = {"bloody hand", "soapy hand", "hand"}
if "bloody hand" not in inventory:
...
elif any(item in hands for item in inventory):
...
Если вы хотите, чтобы таких головоломок было много, я бы предложил вам создать такую функцию:
def is_inside(inventory, item_2_check):
for item in inventory:
if item_2_check in item:
return True
else:
return False
if not is_inside(inventory, "hand"):
#Whatever you want to do.
Это вернет True для "кровавой руки", "мыльной руки" и "руки". Это работает тоже в линии if is_inside(inventory, "razor")