Как запросить логический ввод от пользователя для определения операторов if и напечатать предложение, используя эту информацию в Python - PullRequest
0 голосов
/ 25 сентября 2018

Я здесь с моим первым (надеюсь, не последним) запросом для вас.

Я пытаюсь получить информацию от пользователя, в частности, логические значения, чтобы определить, являются ли они мужчинами / женщинами и высокими /short, затем выведите правильное утверждение «Вы высокий / низкий мужчина / женщина»

is_tall = input("Are you tall?")
is_male = input("Are you male?")

if is_tall and is_male:
  print("You are a tall male")
elif is_tall and not(is_male):
  print("You are a tall female")
elif not(is_tall) and is_male:
  print("You are a short male, sorry")
else:
  print("You are a short female, sorry")

Мой код запускается и всегда возвращает «Вы высокий мужчина», поиск показывает, что это потому, что ввод пользователявсегда считается истинным, поскольку это строка.

Я видел другие примеры для получения булевых значений, но не для получения двух и использования их обоих в операторах if.Я где-нибудь рядом, чего мне не хватает?Я знаю, что не могу использовать bool () для ввода, чтобы преобразовать его.

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

вы можете попробовать что-то вроде этого:

tall_str = input("Are you tall? ")
while tall_str.lower() not in {'y', 'yes', 'n', 'no'}:
   tall_str = input("Are you tall [y/n] ? ")

is_tall = True if tall_str.lower() in {'y', 'yes'} else False

, он примет такие вещи, как 'Yes' и 'nO' (для tall_str), а затем преобразует их в True или False (для is_tall) и спросите еще раз, является ли данный ответ неприемлемым.

Вы можете сделать то же самое для is_male.

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

0 голосов
/ 25 сентября 2018

Может быть, этот подход вам подходит?

is_tall = True if input("Are you tall?").lower() == 'y' else False
is_male = True if input("Are you male?").lower() == 'y' else False
...

Нет простого способа получить bool на входе, хотя вы можете конвертировать его самостоятельно.

0 голосов
/ 25 сентября 2018

В настоящее время вы проверяете, не является ли строка ненулевой.Вместо этого проверьте значение строки.

    if is_tall.upper() in ('YES', 'Y') and is_male.upper() in ('YES', 'Y'):
        print("You are a tall male")
    elif is_tall.upper() in ('YES', 'Y') and is_male.upper() in ('NO', 'N'):
        print("You are a tall female")

и т. Д.

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

...