2013-12-18 3 views
0

Я делаю быструю игру zork, но я столкнулся с этой проблемой, используя оператор «или». Я думал, что это будет просто, но я не могу понять, почему это не работает. Прямо сейчас, если вы наберете «n», вы должны получить «это работает», потому что оно равно строке «n». Вместо этого он печатает «работает» и «это работает», поэтому я, очевидно, использовал «или» неправильно.Или путаница оператора python

x=0 
    while x<20: 
     response = input("HI") 
     if response!= 'n': 
      print("it works") 

     if response == 'n': 
      print("this works") 
     x+=1 

Перед использованием или она работает

x=0 
while x<20: 
    response = input("HI") 
    if (response!= 'n') or (response != 's'): 
     print("it works") 


    if (response == 'n') or (response == 's'): 
     print("this works") 
    x+=1 

После использования или печатает оба раза. Это, вероятно, что-то очевидно -.-

+0

Как примечание стороны, для Zork стиля текста приключенческой игры, функция для каждой комнаты (я просто предполагая здесь, но это то, что большинство новичков, ...), каждая из которых является длинной строкой операторов 'if' /' elif', подобных этому, очень быстро становится громоздкой. Возможно, вам стоит подумать о том, чтобы разделить парсер с остальной частью кода и использовать реальную библиотеку разбора и превратить комнаты в данные вместо кода и т. Д. Сначала создайте приключение во что-то вроде [Информ] (http://inform7.com), чтобы увидеть, как легко это может быть, а затем попытаться выяснить, как сделать это так легко в Python, может быть, будет полезно. – abarnert

ответ

4

выражение:

(response != 'n') or (response != 's') 

будет всегда быть правдой для любой строки ответа. Если response - 'n', то это не 's'. Если это 's', то это не 'n'. Если это что-то еще, то это не 's', и это не 'n'.

Возможно, вы хотели использовать and?

+0

Я идиот, я не думал правильно – Jotin2

+2

@ Jotin2 - Теперь давайте не будем призывать к вызову имени. Я почти уверен, что большинство из нас потратили часы нашей жизни, озадаченные столь же простыми ошибками. – mgilson

+0

@mgilson Я полностью согласен :) – thefourtheye

2

Если response либо n, либо s, оба условия будут выполнены. Лучший способ сделать это был бы

if response in ('n', 's'): 
    print ("it works") 
else: 
    print ("this works") 
Смежные вопросы