2015-09-13 2 views
-1

Теперь проблема возникает из моих операторов if, даже если я наберу «Да», он все равно скажет «Недействительный ввод» и снова выполнит мою функцию main(). Не уверен, что не так. Не уверен, что я неправильно использую утверждения if, elif.Не получать входные данные

condition=input("What is the condition of the phone(New or Used)?") 
     if(condition != "New") or (condition != "new"): 
      print("Invalid input") 
      return main() 
     elif(condition != "Used") or (condition != "used"): 
      print("Invalid input") 
      return main() 


     gps=input("Does the phone have gps(Yes or No)?") 
     if(gps != "Yes") or (gps != "yes"): 
      print("Invalid input") 
      return main() 
     elif(gps != "No") or (gps != "no"): 
      print("Invalid input") 
      return main() 


     wifi=input("Does the phone have wifi(Yes or No)?") 
     if(wifi != "Yes") or (wifi != "yes"): 
      print("Invalid input") 
      return main() 
     elif(wifi != "No") or (wifi != "no"): 
      print("Invalid input") 
      return main() 


     camera=input("Does the phone have a camera(Yes or No)?") 
     if(camera != "Yes") or (camera != "yes"): 
      print("Invalid input") 
      return main() 
     elif(camera != "No") or (camera != "no"): 
      print("Invalid input") 
      return main() 
+0

Ваш код показывает фундаментальное недопонимание по вопросу объединения нескольких условий в выражение «if». Лучше сделайте еще несколько поисковых запросов. – StillLearnin

+0

Для python 2 замените «input» на «raw_input» –

+0

Предположим, вы набрали «Да», подумайте, что будет результатом первой проверки. Это неверно, поэтому выполнение падает до «elif» – StillLearnin

ответ

2

Ваша программа делает именно то, что оно было написано сделать. После каждой input() линии, он выполняет следующие действия:

print("Invalid input") 
return main() 

Для примера возьмем первый блок кода:

condition=input("What is the condition of the phone(New or Used)?") 
if(condition != "New") or (condition != "new"): 
    print("Invalid input") 
    return main() 
elif(condition != "Used") or (condition != "used"): 
    print("Invalid input") 
    return main() 

Допустим, вы ввести New в командной строке, так condition теперь имеет значение "New". Первое испытание в заявке if даст False - "New" != "New" является ложным, потому что на самом деле "New"делает"New". Следующее условие после or теперь протестировано и возвращает True (потому что "New" действительно не равно "new"), поэтому блок выполнен, печать "Invalid input" и запуск main() сначала.

+0

Уважаемые Downvoters: Я бы с удовольствием рассмотрел ваши проблемы с моим ответом, но вы ничего не сказали. Теперь мне грустно :( – MattDMo

+0

Не совсем полезный ответ, так как очевидная проблема заключается в отсутствии понимания условного программирования. Op уже подозревает, что это проблема, и ваш ответ не помог, так что теперь он грустен :( – StillLearnin

+0

@StillLearnin Я сейчас доволен своим ответом. Надеюсь, что другие и OP тоже будут. – MattDMo

1
if (condition != "New") or (condition != "new"): 

Это всегда будет правда, так как condition не может быть «новым» и «новым». По крайней мере одно из сравнений будет True, делая все выражение равным True. Это можно устранить, переключив or на and. То же самое следует для любого другого условия вашего кода.

Даже если вы измените чек

(condition != "New") and (condition != "new") 

вы все еще есть еще одна проблема. Если condition == "New", тогда проверка False и оценки переходят на elif.

elif (condition != "Used") and (condition != "used"): 

elif должно быть ложным, поскольку condition не «Б», ни «б». Вы можете это исправить, поставив все испытания в том же случае, если:

if (condition != "New") and (condition != "new") and (condition != "Used") and (condition != "used"): 

Однако более идиоматических способ сделать это:

if condition not in ["New", "new", "Used", "used"]: 
    print("Invalid input") 
    return main() 

Это печатает «Invalid Input», если condition не является ни одной из строк в ["New", "new", "Used", "used"].

Даже лучше было бы игнорировать корпус вообще. Чтобы сделать это, просто позвоните .lower() на input:

condition = input("What is the condition of the phone(New or Used)?").lower() 

Вы можете проверить

if condition not in ["new", "used"]: 

и ваш код будет принимать входные сигналы, такие как "новый", "Used", "NeW" и не работают (print("Invalid input")) для других входов.

+0

Огромное вам спасибо! такой неряшливый вопрос, это мой первый пост. Я ценю объяснение и усилие, вложенные в это. Спасибо !!!!! – SavageSammy

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