用python输入布尔值[重复]

Posted

技术标签:

【中文标题】用python输入布尔值[重复]【英文标题】:Inputing boolean values with python [duplicate] 【发布时间】:2016-10-02 23:47:06 【问题描述】:

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

问题是,无论您对记录为“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))

【问题讨论】:

这是因为 bool() 函数将所有内容评估为 True (1),除了空列表/元组、None、False 或空字符串。说 bool("anything") 总是被评估为 True,因为有些东西。 重复的内容几乎是 sqllite3 布尔值存储为 0、1。SQLite 没有单独的布尔存储类。 doc供参考 就这么简单:answer = input().lower() == "yes";。您还可以进行其他检查: answer = int(input()) > 100;等等。 【参考方案1】:

在 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 进行显式转换。

【讨论】:

【参考方案2】:

如果输入不是None,则用布尔值包装输入将始终返回True。相反,您可以执行以下操作:

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

【讨论】:

以上是关于用python输入布尔值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中初始化大量布尔值 [重复]

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]

Python条件布尔值[重复]

返回布尔值和消息的Pythonic方式[重复]

位向量与布尔值列表的性能

python中的用户输入布尔值