2016-06-01 2 views
-1

Я довольно новичок в python и программировании, поэтому мне очень жаль, если это вопрос «noob». В любом случае, можно ли задать выбор между несколькими вариантами в python, без цикла if?Как разрешить пользователю выбирать вход из конечного списка?

Глупый пример:

print "Do you want to enter the door" 
raw_input ("Yes or not") 

И пользователь может выбрать только между выбором.

+0

'if' не является цикл. Почему вы не хотите использовать 'if'? –

+0

Идея состоит в том, что если вы не пишете «Да» или «Нет», ничего не появится, программа будет просто ждать от вас, чтобы написать одну из двух и не продолжить. –

+0

Вам понадобится цикл, чтобы сделать это – Keatinge

ответ

2

Если вам нужно сделать это на регулярной основе, имеется удобная библиотека для этой цели, которые могут помочь вам достичь лучшего пользовательского опыта легко: inquirer

Отказ от ответственности: Насколько я знаю, он не будет работать на Windows без каких-либо хаков.

Вы можете установить вопрошающие с пипом:

pip install inquirer 

Пример 1: Несколько вариантов

Одна из функции запроса-, чтобы позволить пользователям выбрать из списка с помощью клавиш стрелок клавиатуры, не требующие их написать свои ответы. Таким образом, вы можете добиться лучшего UX для консольного приложения.

Вот пример, взятый из documentation:

import inquirer 
questions = [ 
    inquirer.List('size', 
       message="What size do you need?", 
       choices=['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'], 
      ), 
] 
answers = inquirer.prompt(questions) 
print answers["size"] 

Inquirer example

Пример 2: Да/Нет вопросов:

Для "Да/Нет" вопросов, таких, как ваша, вы можете даже использовать запросчик Подтвердить:

import inquirer 
confirm = { 
    inquirer.Confirm('confirmed', 
        message="Do you want to enter the door ?" , 
        default=True), 
} 
confirmation = inquirer.prompt(confirm) 
print confirmation["confirmed"] 

Yes no questions with Inquirer

Другие полезные ссылки:

Inquirer's Github repo

+0

О, это именно то, что я имел в виду. Нет способа заставить его работать с окнами? –

+0

Возможно, это возможно, но я havent удалось заставить его работать над окнами. Я не копал слишком много, так как мне не нужно было работать над окнами, когда я использовал его ... – Khopa

2

Один из возможных способов достижения желаемого результата - это цикл while.

print "Do you want to enter the door" 
response = None 
while response not in {"yes", "no"}: 
    response = raw_input("Please enter yes or no: ") 
# Now response is either "yes" or "no" 
+0

Просто любопытно, использует набор для опций '{" yes "," no "}' лучше/быстрее, чем использовать список? – Keatinge

+1

В двухэлементном случае это вряд ли имеет какое-либо значение, но набор становится намного быстрее по мере увеличения количества элементов. Причиной этого является базовая реализация метода '__contains__', который для списка выполняет итерацию по каждому элементу, пока не найдет совпадение или не исчерпает все элементы.Для набора используются методы хэширования, которые дают почти постоянное время выполнения независимо от количества элементов. – holdenweb

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