2013-10-13 7 views
3

Я хотел бы использовать Python 3's input(), чтобы задать пользователю вопрос «да» или «нет». Например:Определить, является ли строка "утвердительной"?

affirmative = ["", "y", "yes"] 
x = input("Continue? [Y/n] ").lower() 
if x in affirmative: 
    # Do something 
else: 
    print("Canceled") 

Есть ли определенный список, который я должен использовать для «утвердительных» ответов? Я знаю, что у Python есть такие вещи, как string.uppercase и string.lowercase для предопределенных списков переменных. Есть ли список ответов, которые следует считать ответом «да»?

+0

ну, например, я бы не сказал, что пустая строка утвердительный ... – roippi

+0

Так как вы попросив пользователя ввести 'Y' (по умолчанию) или' n', я считаю, что проверка первой буквы достаточно. –

+0

@roippi это как 'apt-get', предполагается, что вы хотите делать то, что вы просили, но сначала подтвердите его –

ответ

5

Python's distutils имеет strtobool, который может сработать для вас. Documentation Link.

distutils.util.strtobool (вал)

Преобразовать строковое представление истины истина (1) или ложь (0).

  • Истинные значения: у, да, т, правда, на, .
  • Ложные значения: п, нет, е, ложные, от, .
  • Повышает ValueError в противном случае.

Но это точно не вписывается в стиль вы в настоящее время в надежде на.

+0

Ya, но ... когда подсказка ** говорит ** «Y/n», пользователь, вводящий (например) «True», просто путается :-( –

+0

@TimPeters: Я согласен. Я считаю, что правильное решение homebrew набор приемлемых ответов. –

0

Учитывая любые ответы (которые также могут быть несколько) утвердительные или отрицательные, все зависит от вас. Вы можете либо создать массив потенциальных пользовательских ответов (как вы уже показали), либо просто сообщить пользователю, что вход был неправильным и оповещающим с сообщением типа «ответьте« да »или« нет ».

Также в основном используются утвердительные сообщения: yes, y, true, t, 1.

1

У меня есть идея: принимайте что-нибудь, начинающееся с «yYnN», и пустую строку, если нужно. Жалуйтесь на что-нибудь еще и спрашивайте еще раз. Пользователи привыкнут к этому очень быстро.

«Там должно быть одно- и предпочтительно только один -obvious способ сделать это» :-)

+1

Это броское, кто-то должен это записать. – roippi

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