2016-10-02 85 views
0

我正在構建一個簡單的程序,以便爲我的租賃屬性預先篩選租戶。程序詢問他們一系列問題 - 其中一些問題需要一個「是」或「否」的答案,這將是一個布爾(真/假)。使用python輸入布爾值

問題是,無論您爲布爾輸入回答什麼,它都會記錄爲「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)) 
+0

這是因爲bool()函數評估一切爲真(1),除了像空列表/元組,空,假或空字符串的東西。說布爾(「任何」)總是評估爲真,因爲有什麼。 – Nf4r

+0

幾乎重複的是,sqllite3布爾被存儲爲0,1。* SQLite沒有單獨的布爾存儲類*。 [doc](http://www.sqlite.org/datatype3.html)僅供參考 – idjaw

+0

就像:answer = input()。lower()==「yes」;.您還可以執行其他檢查:answer = int(input())> 100;等等.. – dinomoth

回答

0

如果輸入不是無,則以布爾值包裝輸入將始終返回True。相反,你可以這樣做:

response = False if raw_input("The yesno question? ").lower() == 'no' else True 
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 

此用戶的輸入轉換爲小寫,然後檢查該值是否在設置YES_VALUESx in y的結果已經是布爾值,因此不需要通過bool進行明確的轉換。