使用python输入布尔值

时间:2016-10-02 23:47:06

标签: python input sqlite

我正在构建一个简单的程序,以预先筛选出租物业的租户。该程序向他们询问了一系列问题 - 其中一些问题需要一个“是”或“否”的答案,这是一个布尔值(真/假)。

问题是,无论你为布尔输入回答什么,它都会记录为“1”。

我在本地使用sqlite3存储数据,这里是代码:

def enter_dynamic_data():
     fname = input("First Name? ")
     lname = input("Last Name? ")
     email = input("Email? ")
     phone = input("Phone? ")
     criminal = bool(input("Have you ever been convicted of a crime? "))
     evicted = bool(input("Have you ever been evicted? "))
     income = bool(input("Do you have verifiable income of at least 3x the rent amount? "))
     ref = bool(input("Do you have good rental references? "))

     c.execute("INSERT INTO tenant_screening (firstname, lastname, email, phone, criminal, evicted, income, ref) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (fname, lname, email, phone, criminal, evicted, income, ref))

2 个答案:

答案 0 :(得分:0)

在Python中,任何非空字符串都被视为True,因此无论用户输入什么,当转换为布尔值时,用户输入的所有非空字符串都将为True

>>> bool('true')
True
>>> bool('false')
True
>>> bool('')
False

因此,您需要将用户输入的值与表示True的一组值进行比较,例如

YES_VALUES = {'y', 'yes', 'ok'}

criminal = input("Have you ever been convicted of a crime? ").lower() in YES_VALUES

这会将用户的输入转换为小写,然后检查该值是否在 set YES_VALUES中。 x in y的结果已经是布尔值,因此不需要通过bool进行显式转换。

答案 1 :(得分:0)

如果输入不是None,则以布尔值包装输入将始终返回True。相反,你可以做类似的事情:

response = False if raw_input("The yesno question? ").lower() == 'no' else True