2017-02-12 18 views
-2
def main(): 
x = input("print data? (Y/N) ") 

while (x != 'Y' or x != 'N'): 
    x = input("error: wrong input. Please put Y or N only ") 

if x == 'Y': 
    read_serial() 

Попытка проверить, соответствует ли вход клавиатуры (x) строкой 'Y' или 'N'. И если нет, цикл продолжается до тех пор, пока он не будет. Однако приведенный выше код, похоже, компилируется и работает отлично, за исключением того, что независимо от того, что цикл продолжает работать. У меня нет большого опыта работы с Python 3, но может ли кто-нибудь сказать мне, что я делаю неправильно?Python: как сравнить строку input() с другой строкой?

+0

@ tigerhawkT3 Я не думаю, что это правильный дубликат. – Maroun

+0

@MarounMaroun - Это конечно. Добавление 'not' (например,' x not in 'YN'' является тривиальным. – TigerhawkT3

ответ

1

Это утверждение

x != 'Y' or x != 'N' 

всегда True, потому что все в мире не является "Y" или не "N".

Изменить его:

x != 'Y' and x != 'N' 
0

Измените or к and, как вы хотите, чтобы проверить это не равно ни одному из этих полей. Если вы хотите использовать or вам придется изменить код

def main(): 
    user_input = input("print data? (Y/N) ") 

    while (true): 
     if (user_input.lower() == 'y' or user_input.lower() == 'n'): 
      break 
     user_input = input("error: wrong input. Please put Y or N only ") 

    if user_input.lower() == 'y': 
     read_serial() 

примечание: x бедного имя переменным, называете это что-то более подходящим.

Вы должны всегда менять размер корпуса при сравнении строк, когда дело не имеет значения. В данном случае, дело не так важно использовать lower()

def main(): 
    user_input = input("print data? (Y/N) ") 

    while (user_input.lower() != 'y' and user_input.lower() != 'n'): 
     user_input = input("error: wrong input. Please put Y or N only ") 

    if user_input.lower() == 'y': 
     read_serial()