Преобразовать пользовательский ввод в логическое значение и вызвать ошибку в Python? - PullRequest
0 голосов
/ 01 октября 2019

Я работаю с Python версии 3.7.4. Я работаю над фрагментом кода, который требует ввода данных пользователем в форме «да» или «нет», следующим образом:

isValid = input("Is this a previous version? (y/n)")

Я хотел бы преобразовать этот вопрос «да» или «нет» в логический ответ. Я видел одну возможность, которую я заинтересован в реализации:

isValid = False if input("Is this a previous version? (y/n)").lower() == 'n' else True

Я также хочу учесть, если бы пользователь должен был вводить данные, отличные от y или n. В идеале, я хотел бы поднять ошибку, если они должны были дать вход. Может ли кто-нибудь показать мне, как реализовать булеву переменную isValid, как это в сжатой форме, или мне придется создать другой метод, который будет проверять пользовательский ввод? Заранее спасибо. Я могу добавить больше деталей, если это необходимо.

Ответы [ 5 ]

1 голос
/ 01 октября 2019

Это немного более многословно, но заставит пользователя вводить y или n и продолжать спрашивать, пока они не сделают:

isValid = input("Is this a previous version? (y/n)")
try:
    while isValid is not True or False:
        if isValid.lower() == 'y':
            isValid == True
            break
        elif isValid.lower() == 'n':
            isValid == False
            break
        else:
            print("please select y or n")
            isValid = input("Is this a previous version? (y/n)")
except:
    print("Please select a valid response")
0 голосов
/ 01 октября 2019

Однострочный способ получить логическое значение, а также вызвать исключение.

ans = input('y/n : ').lower(); ans1 = False if ans=='n' else (True if ans=='y' else exec('raise(ValueError)'))

ans1 - логический ответ.

0 голосов
/ 01 октября 2019

Вы могли бы сделать что-то вроде этого, но это довольно уродливо, и я не рекомендую это вообще:

def raiser(ex): raise ex
my_input = input("Is this a previous version? (y/n)").lower()
isValid = False if my_input == 'n' else True if my_input == 'y' else raiser(Exception)

Один из лучших способов сделать что-то подобное - это простой if /elif / else:

my_input = input("Is this a previous version? (y/n)")
if my_input == "y":
    isValid = True
elif my_input == "n":
    isValid = False
else:
    raise Exception
0 голосов
/ 01 октября 2019

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

check = False if isvalid.lower() == 'n' else True
isvalid = check 
0 голосов
/ 01 октября 2019

Может быть, что-то в этом роде?

isValid = input("Is this a previous version? (y/n)").lower() in ['y', 'n']
# if isValid: ... do whatever else: raise error
...