我正在尝试使用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。
答案 0 :(得分:1)
您发现了一些错误。
1)将字符串转换为布尔值时,除非字符串为空(""
),否则python始终返回True。因此,无论字符串是"True"
还是"False"
都没关系,当您执行True
时,它将始终变为bool(str)
。
2)在if
语句中,您正在将布尔值(ans_male
变量)与字符串("True"
)进行比较。如果要使用布尔值,则应只写True
或False
,且不要带引号。
在您的情况下,当您从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
有时对于此类问题很奇怪。