如何使用户输入更改布尔值?

时间:2019-08-17 18:12:37

标签: python python-3.7

我正在尝试使用Python 3.7.4编写一个简单的小程序。我想知道是否有可能(如果可以,如何?)从用户输入更改变量的布尔值。

正如您在所附代码中看到的那样,我尝试将附加内容放在引号中。我也没有报价。

    is_male = []
    is_female = []
    is_tall = []
    is_short = []

    ans_male = bool(input("Are you a male? (True or False): "))
    if ans_male == "True":
        is_male.append("True")
    if ans_male == "False":
        is_male.append("False")
    ans_female = bool(input("Are you a female? (True or False): "))
    if ans_female == "True":
        is_female.append("True")
    if ans_female == "False":
        is_female.append("False")
    ans_tall = bool(input("Are you tall? (True or False): "))
    if ans_tall == "True":
        is_tall.append("True")
    if ans_tall == "False":
        is_tall.append("False")
    ans_short = bool(input("Are you short? (True or False): "))
    if ans_short == "True":
        is_short.append("True")
    if ans_short == "False":
        is_short.append("False")

我希望is_male,is_tall等变量的值根据输入更改为True或False。

7 个答案:

答案 0 :(得分:1)

您发现了一些错误。

1)将字符串转换为布尔值时,除非字符串为空(""),否则python始终返回True。因此,无论字符串是"True"还是"False"都没关系,当您执行True时,它将始终变为bool(str)

2)在if语句中,您正在将布尔值(ans_male变量)与字符串("True")进行比较。如果要使用布尔值,则应只写TrueFalse,且不要带引号。

在您的情况下,当您从input()读取值时,将其保留为字符串并与"True""False"进行比较要容易得多。因此,您可以执行以下操作:

ans_male = input("Are you a male? (True or False): ")
if ans_male == "True": # Check if string is equal to "True"
    is_male.append(True) # Appends the boolean value True to the list.

答案 1 :(得分:0)

在这里,即使您输入的内容为假,ans_male也将为真值。您不能像这样将字符串转换为bool值。更好地创建一个将字符串转换为bool值的函数,如下所示。

def stringToBool(ans_male):
    if ans_male == 'True':
       return True
    else if ans_male == 'False'
       return False
    else:
       raise ValueError

答案 2 :(得分:0)

布尔型没有引号,仅用于字符串。以下是应用了此更改的代码的1/4:

    is_male = []

    ans_male = bool(input("Are you a male? (True or False): "))
    if ans_male == "True":
        is_male.append(True)
    if ans_male == "False":
        is_male.append(False)

注意::ans_male ==“ True”具有字符串格式的布尔值,因为使用input()分配的值始终是字符串。

因此,您可能要改用以下内容(因为遵循):

is_male = []
    is_female = []
    is_tall = []
    is_short = []

    ans_male = bool(input("Are you a male? (Yes or No): "))
    if ans_male == "Yes":
        is_male.append(True)
    if ans_male == "No":
        is_male.append(False)
    ans_female = bool(input("Are you a male? (Yes or No): "))
    if ans_female == "Yes":
        is_female.append(True)
    if ans_female == "No":
        is_female.append(False)
    ans_tall = bool(input("Are you a male? (Yes or No): "))
    if ans_tall == "Yes":
        is_tall.append(True)
    if ans_tall == "No":
        is_tall.append(False)
    ans_short = bool(input("Are you a male? (Yes or No): "))
    if ans_short == "Yes":
        is_short.append(True)
    if ans_short == "No":
        is_short.append(False)

答案 3 :(得分:0)

is_male.append(True)应该可以工作。我测试了它,并在v3.7.4上为我工作。

答案 4 :(得分:0)

考虑此代码。您具有要询问的问题列表,并与关联的属性(is_male等)配对。您有一本将用户输入映射到布尔值的字典。对于每个问题,您都将打印当前问题并等待用户输入内容。如果他们输入了无效的内容(“ True”或“ False”以外的其他内容),则while循环将继续询问相同的问题,直到用户满意地回答为止。用户回答完所有问题后,我们将打印结果。

questions = [
    ("Are you male?", "is_male"),
    ("Are you tall?", "is_tall")
]

input_to_bool = {
    "True": True,
    "False": False
}

user = {}

for question, key in questions:
    while True:
        user_input = input(f"{question}: ")
        if user_input in input_to_bool:
            user.update({key: input_to_bool[user_input]})
            break

for key, value in user.items():
    print(f"{key}: {value}")

输出:

Are you male?: True
Are you tall?: False
is_male: True
is_tall: False

答案 5 :(得分:0)

您的代码将用户输入转换为bool。

ans_male = bool(input("Are you a male? (True or False): "))

因此任何输入将为True,而没有输入将为False。

如何做类似的事情:

is_male = []
ans_male = input('Are you a male? (Y or N): ')

if ans_male.upper() == 'Y':
    is_male.append(True)

elif ans_male.upper() == 'N':
    is_male.append(False)

else:
    print('Please choose Y or N')
    pass

答案 6 :(得分:0)

使用此代码节省您的钱和时间:

    is_male = []
    is_female = []
    is_tall = []
    is_short = []

    que = "Are you {} (Yes/No) : "

    ans_male = True if input(que.format("a male?")).lower()=='yes' else False
    is_male.append(str(ans_male))
    #if you want to append list with 'True'/'False' (type->str)

    ans_female = True if input(que.format("a female?")).lower()=='yes' else False
    is_female.append(ans_female)
    #if you want to append list with True/False (type -> bool)

    ans_tall = True if input(que.format("tall?")).lower()=='yes' else False
    is_tall.append(ans_tall)

    ans_short = True if input(que.format("short?")).lower()=='yes' else False
    is_short.append(ans_short)

这是您在问题中提供有效解决方案的相同代码。

是的,答案应该是Yes/No,因为True/False有时对于此类问题很奇怪。