2013-07-15 3 views
1

Я пытаюсь добавить инструкцию if для проверки недопустимого ввода. Он работает так, как должен, и снова зацикливается, если пользователь вводит «Да» и заканчивается, если пользователь вводит «Нет». Но по какой-то странной причине независимо от того, что ответ: да, нет, случайный символ и т. Д. Он всегда печатает инструкцию «неверный вход». Я пытаюсь сделать это только для печати, когда ответ не «Да» или «Нет».Если оператор всегда печатает (Python)

while cont == "Yes": 
    word=input("Please enter the word you would like to scan for. ") #Asks for word 
    capitalized= word.capitalize() 
    lowercase= word.lower() 
    accumulator = 0 

    print ("\n") 
    print ("\n")  #making it pretty 
    print ("Searching...") 

    fileScan= open(fileName, 'r') #Opens file 

    for line in fileScan.read().split(): #reads a line of the file and stores 
     line=line.rstrip("\n") 
     if line == capitalized or line == lowercase: 
      accumulator += 1 
    fileScan.close 

    print ("The word", word, "is in the file", accumulator, "times.") 

    cont = input ('Type "Yes" to check for another word or \ 
"No" to quit. ') #deciding next step 
    cont = cont.capitalize() 

    if cont != "No" or cont != "Yes": 
     print ("Invalid input!") 

print ("Thanks for using How Many!") #ending 

ответ

2

if cont != "No" or cont != "Yes":

Оба Yes и No sastisfy это условие

Это должно быть cont != "No" and cont != "Yes"

2

Конт всегда будет либо не равно "Нет" или не равно "Да". Вы хотите and вместо or.

Или, поочередно,

if cont not in ['No', 'Yes']: 

, который будет более расширяемой, если вы хотите, например, добавить в нижнем регистре.

+0

О, черт возьми. Как я этого не заметил. Хахаха вам большое спасибо :) –

2

if cont != "No" or cont != "Yes" означает «если ответ не« Нет »или« Да ». Все или нет Нет или нет Да, так как это не может быть и то, и другое.

Измените его на if cont not in ("Yes", "No").

2

Вам нужна операция and вместо or. Используя операцию или, ваше состояние будет оценивать значение true независимо от входного значения. Измените условие:

if cont != "No" and cont != "Yes": 

или просто использовать:

if cont not in ("No", "Yes"): 
8

Это потому, что все, что вы вводите, по крайней мере один из тестов True:

>>> cont = 'No' 
>>> cont != "No" or cont != "Yes" 
True 
>>> (cont != "No", cont != "Yes") 
(False, True) 
>>> cont = 'Yes' 
>>> cont != "No" or cont != "Yes" 
True 
>>> (cont != "No", cont != "Yes") 
(True, False) 

Использование and вместо :

>>> cont != 'No' and cont != 'Yes' 
False 
>>> cont = 'Foo' 
>>> cont != 'No' and cont != 'Yes' 
True 

или использовать тест членства (in):

>>> cont not in {'Yes', 'No'} # test against a set of possible values 
True 
-1
if cont != "No" or cont != "Yes": 

Что же вы могли бы вход, который не удовлетворяет этому?

+2

Это не очень полезный ответ. Хотя для ответа на ваш вопрос вы можете создать класс и определить метод '__ne __()'. – pandubear

+0

@pandumear: +1. Тривиальный класс, который просто нет! = Что-то явно глупо, но тогда так и был вопрос, на который вы отвечали (и могут быть реальные дела, которые работают так). – abarnert

Смежные вопросы