2016-10-02 8 views
0

Ich baue ein einfaches Programm, um Mieter für meine Mietobjekte vorzusortieren. Das Programm stellt ihnen eine Reihe von Fragen, von denen einige eine "Ja" - oder "Nein" -Antwort erfordern, was ein boolescher Wert (wahr/falsch) wäre.Eingabe boolescher Werte mit Python

Das Problem ist, egal was Sie für die booleschen Eingaben antworten, die es als "1" aufzeichnet.

ich sqlite3 lokal bin mit den Daten zu speichern, hier ist der Code:

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

Es ist, weil bool() -Funktion alles auf True (1) außer Dingen wie leere Listen/Tupel, keine, falsche oder leere Zeichenfolgen auswertet. Das Sagen von bool ("alles") wird immer als wahr bewertet, weil es etwas gibt. – Nf4r

+0

So ziemlich das, was das Duplizieren angibt, ist, dass sqllite3 bools als 0, 1 gespeichert werden. * SQLite hat keine separate boolesche Speicherklasse *. [doc] (http://www.sqlite.org/datatype3.html) zur Referenz – idjaw

+0

So einfach wie: answer = input(). lower() == "yes" ;. Sie können auch andere Prüfungen durchführen als: answer = int (input())> 100; etc.. – dinomoth

Antwort

0

Die Eingabe der Eingabe in Boolean liefert immer True, wenn die Eingabe nicht None ist. Stattdessen können Sie etwas wie:

0

In Python jede nicht leere Zeichenfolge True so unabhängig von der Eingabe des Benutzers alle nicht leer eingegebenen Strings durch die in Betracht gezogen wird Benutzer wird True sein, wenn in boolean konvertiert.

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

So müssen Sie den Wert durch den Benutzer gegen eine Reihe von Werten, die True darstellen eingegeben vergleichen, zum Beispiel

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

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

Dieser wandelt die Eingabe des Benutzers in Kleinbuchstaben und überprüft dann, ob dieser Wert wird in der YES_VALUES eingestellt. Das Ergebnis von x in y ist bereits ein boolescher Wert, eine explizite Konvertierung über bool ist nicht erforderlich.

Verwandte Themen