Логика или оператор не ведет себя как ожидалось
def Forest(Health,Hunger):
print'You wake up in the middle of the forest'
Inventory = 'Inventory: '
Squirrel = 'Squirrel'
while True:
Choice1 = raw_input('You...\n')
if Choice1 == 'Life' or 'life':
print('Health: '+str(Health))
print('Hunger: '+str(Hunger))
elif Choice1 == 'Look' or 'look':
print 'You see many trees, and what looks like an edible dead Squirrel, \na waterfall to the north and a village to the south.'
elif Choice1 == 'Pickup' or 'pickup':
p1 = raw_input('Pickup what?\n')
if p1 == Squirrel:
if Inventory == 'Inventory: ':
print'You picked up a Squirrel!'
Inventory = Inventory + Squirrel + ', '
elif Inventory == 'Inventory: Squirrel, ':
print'You already picked that up!'
else:
print"You can't find a "+str(p1)+"."
elif Choice1 == 'Inventory' or 'inventory':
print Inventory
Я пытаюсь сделать так, чтобы, когда там говорилось: "Ты...", ты можешь напечатать Life, Pickup, Look или Inventory У меня есть намного больше кода в этой программе, я просто показываю вам часть. Но каждый раз, когда я запускаю его, он всегда показывает часть "Life", даже если вы набираете "Pickup", "Look" или "Inventory". Пожалуйста помоги! Спасибо Джон
РЕДАКТИРОВАТЬ: Я думаю, что это просто проблема пробелов, но я не уверен, что раньше все работало нормально...
3 ответа
Вы неправильно понимаете or
выражение. Используйте это вместо:
if Choice1.lower() == 'life':
или, если вам нужно протестировать несколько вариантов, используйте in
:
if Choice1 in ('Life', 'life'):
или, если вы должны использовать or
затем используйте это так:
if Choice1 == 'Life' or Choice1 == 'life':
и расширить это на другой Choice1
тесты.
Choice1 == 'Life' or 'life'
интерпретируется как (Choice1 == 'Life') or ('life')
с последней частью, всегда являющейся Истиной. Даже если это было истолковано как Choice1 == ('Life' or 'life')
тогда последняя часть будет оценивать 'Life'
только (это правда, что булевы тесты), так что вы будете тестировать, если Choice1 == 'Life'
вместо этого и настройка Choice
в 'life'
никогда бы не сдал тест.
У тебя есть:
if Choice1 == 'Life' or 'life':
Что на самом деле эквивалентно:
if (Choice1 == 'Life') or 'life':
Непустая / ненулевая строка ('life') всегда будет рассматриваться как истина, поэтому вы оказались там.
Вы либо хотите:
if Choice1 == 'Life' or Choice1 == 'life':
или же:
if Choice1.lower() == 'life':
Использование in
:
elif Choice1 in ('Pickup', 'pickup'):
Кроме того, вы можете использовать регулярные выражения:
import re
elif re.match("[Pp]ickup", Choice1):
Отдельно я бы использовал set
для вашего инвентаря:
Inventory = set()
Squirrel = 'Squirrel'
while True:
...
if p1 == Squirrel:
if not Inventory:
print'You picked up a Squirrel!'
Inventory.add(Squirrel)
elif Squirrel in Inventory:
print'You already picked that up!'